這應該非常簡單,我真的不確定發生了什麼問題。我創建了一個基本上接收消息的java類,然後將它們提供給我的MainActivity
。當onReceive()
函數觸發時,應用程序崩潰,因爲它有問題將數據發送回MainActivity
。它一直在Zout()
上撥打NullPointerException
致電onReceive()
。簡單的MainActivity和BroadcastReceiver派生類通信問題
這裏是SmsReceiver
類:
package ...; //you don't need to see my dumb package name.
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList;
public class SmsReceiver extends BroadcastReceiver {
ArrayList<String> phoneNumbers;
ArrayList<String> textMessages;
private Activity mainAct; //our reference to MainActivity
//very simple constructor
public SmsReceiver() {
}
//this function is called in onCreate() in MainActivity to provide reference to MainActivity
public void SetSMSReceiverActivity(Activity a){
mainAct = a;
//talk to our main activity
MainActivity mainComm = (MainActivity)mainAct;
mainComm.Zout("SMSReceiver initialized bro"); //this works just fine
}
@Override
public void onReceive(Context context, Intent intent) {
//THIS IS WHAT CAUSES ISSUES! This call to MainActivity does NOT work for whatever reason. Rude.
MainActivity mainComm = (MainActivity)mainAct;
mainComm.Zout("This message won't send"); //this does NOT work fine for whatever reason. Throws NullPointerException.
//...more code down here that actually works!
}
}
功能Zout()
我MainActivity
是一個簡單的打印到TextView
進行調試。我將使用MainActivity
中的函數來接收數據,一旦onReceive()
停止情緒波動。
對不起,如果這是一個愚蠢的問題。我沒有用Java編程幾年,而且我很生疏。我不知道爲什麼這不起作用。我會拋出+ 1的誰可以幫助!
有幾種不同的方法可以解決這個問題。 1)使用接口來促進通信2)在活動中使用靜態方法3)在活動中使用單獨的BroadcastReceiver,以便SmsReceiver在接收廣播時向其廣播。這裏有一些很好的答案:http://stackoverflow.com/questions/4132425/android-communication-between-broadcast-receiver-and-mainactivity-send-data-to –
謝謝@DanielNugent!我現在要研究一些其他形式的交流。有沒有解釋爲什麼對MainActivity的函數調用在一個函數中工作,而不是在另一個函數中工作?我很困惑:s。 – blagh