2011-09-13 54 views
8

Hi làm việc trên một ứng dụng Android SMS trong scala alls đi tốt mong đợi tôi chỉ không thể tìm cách để viết mã java sau trong scala. Bất kỳ giúp đánh giá caoĐúc một đối tượng java vào đối tượng [] trong 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]); 

Tôi phải thừa nhận tôi không biết làm thế nào để viết Object [] trong scala nó không java.util.ArrayList [java.lang.Object] Tôi đã thử bằng cách sử dụng Bundle.getStringArrayList để có được một danh sách [chuỗi] và làm một getBytes trên chuỗi nhưng điều đó không làm việc ... nỗ lực cuối cùng của tôi là:

//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 

mã java đến từ: http://mobiforge.com/developing/story/sms-messaging-android Nhờ sự giúp đỡ

Trả lời

11

Th e sau đây trả lời câu hỏi trong tiêu đề và có thể không phải là cách tốt nhất để tiếp cận vấn đề. Cho nó những gì xứng đáng.


Bản dịch nghĩa đen của một dàn diễn viên trong Scala là 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) 

Tuy nhiên, như một bài tập thú vị, tại sao kết quả này trong một ClassCastException?

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

Chúc mừng mã hóa

+0

Cảm ơn pst, đó là những gì tôi cần! – user433320

0

Just for completness đây là những gì tôi đã kết thúc bằng văn bản với đề nghị pst của:

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]() 
} 
Các vấn đề liên quan