2011-09-13 8 views
8

Witam, pracuję nad aplikacją SMS na Androida w scala. Wszystko idzie dobrze. Nie mogę znaleźć sposobu na napisanie następującego kodu java w scala. Każda pomoc mile widzianePrzesyłanie obiektu java Object to Object [] w Scala

//---retrieve the SMS message received--- 
    Object[] pdus = (Object[]) bundle.get("pdus"); 
    msgs = new SmsMessage[pdus.length];    
     for (int i=0; i<msgs.length; i++){ 
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 

Muszę przyznać, że nie wiem jak napisać Object [] w Scala jej nie java.util.ArrayList [java.lang.Object] Próbowałem za pomocą Bundle.getStringArrayList aby uzyskać Lista [String] i zrobić getBytes na strunach, ale to nie działa ... Moja ostatnia próba była:

//I know I should be using an Option ... 
def getSmsListFromIntent(intent:Intent):List[SmsMessage]= { 
    val bundle = intent.getExtras() 
    var ret:List[SmsMessage]= null 
    if (bundle != null) 
     ret= for { pdu <- bundle.getStringArrayList("pdus").toList } yield 
SmsMessage.createFromPdu(pdu.getBytes()) 
    else ret= List() 
    ret 

kod Java pochodzi z: http://mobiforge.com/developing/story/sms-messaging-android Dzięki za wszelką pomoc

Odpowiedz

11

Th Poniższe odpowiedzi odpowiadają na pytanie w tytule i mogą nie być najlepszym sposobem podejścia do problemu. Weź to, co jest warte.


W dosłownym tłumaczeniu z obsadą w Scala jest asInstanceOf:

var x: Object = Array("foo", "bar"); 
var y = x.asInstanceOf[Array[Object]];  
>> x: java.lang.Object = Array(foo, bar) 
>> y: Array[java.lang.Object] = Array(foo, bar) 

Jednak jako rozrywkę, dlaczego ten wynik w ClassCastException?

var x: Object = Array(1, 2); 
var y = x.asInstanceOf[Array[Object]];  

Szczęśliwy kodowania

+0

Thanks PST, to jest to, co potrzebne! – user433320

0

Tylko dla kompletności to, co skończyło się na piśmie z sugestią PST za:

def getSmsListFromIntent(intent:Intent)= { 
    val bundle = intent.getExtras() 
     if (bundle != null) { 
     bundle.get("pdus") 
       .asInstanceOf[Array[Object]] 
       .map(pdu => SmsMessage.createFromPdu(pdu.asInstanceOf[Array[Byte]])) 
     } else Array[SmsMessage]() 
} 
Powiązane problemy