2011-08-12 28 views
0

私はSMSreceiverクラスを持っています、私はアンドロイドに新しいです、今私の質問は、そのクラスから他のクラスの任意のメソッドを呼び出すことが可能です。基本的に私がしようとしているのは、受信した各メッセージを文字列のリンクリストに追加することです。ここに私のコードです...Android :: Broadcasr Receiverクラスを呼び出すメソッドの呼び出し?

public class SMSReceiver extends BroadcastReceiver { 

/** 
* @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent) 
*/ 
static List<String> recNumList = new LinkedList<String>(); 
static String message; 
static Integer count = 0; 
static String phoneNum; 
static String newMessage = null; 
List<String> recMsgs; 
public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 

    Object messages[] = (Object[]) bundle.get("pdus"); 
    SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
    for (int n = 0; n < messages.length; n++) { 
     smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
    } 
     phoneNum = smsMessage[0].getDisplayOriginatingAddress(); 
     message = smsMessage[0].getMessageBody() + "\n" + 
    "Time Stamp:" + smsMessage[0].getTimestampMillis(); 
     recMsgs.add(message); 
} 
} 

しかし、アプリケーションは強制的に閉じて何も追加しません。誰かが私を助けることができますか?

+0

強制的にLogcatの出力を確認できますか? –

+0

NullPointerExceptionエラー、 – aa051

+0

08-12 14:09:28.412:ERROR/AndroidRuntime(337):致命的な例外:メイン 08-12 14:09:28.412:ERROR/AndroidRuntime(337):java.lang .NullPointerException 08-12 14:09:28.412:ERROR/AndroidRuntime(337):android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 08-12 14:09:28.412:ERROR/AndroidRuntime(337) :android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 08-12 14:09:28.412:ERROR/AndroidRuntime(337):android.widget.AbsListView.obtainView(AbsListView.java:1315) – aa051

答えて

0

まず、放送受信機のアレイにsmを追加しないでください。それは100ミリ秒以内にリサイクルされるため、SMSのリストを把握したい場合は、バックグラウンドで実行するサービスを作成します。

代わりに、使用してsharedPreferencesにSMSを救うことができる:

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(); 
// i always use default, though it isn't necessarily convention, I don't think; 
SharedPreferences.editor editor = pref.edit(); 
editor.putString("msg", message); 
editor.commit(); 
//issue with that is, then every time you add a new sms to the shared Preferences 
// the previous one will be overridden. Resolving that is not something I will cover here 

そして、あなたのrecMsgsが初期化されることはありませんので、あなたはNullPointerExceptionが取得している理由はあります。あなたは、配列を維持する必要がある場合、あなたが本当にサービスに移行する必要がありますけれども、onReceive()内で次でそれを実行します。その後、

recMsgs = new ArrayList<String>; 

recMsgs.add(...)への呼び出しを正常に動作します

私はとにかく問題であったと思う。

関連する問題