尝试访问不同类的对象时遇到问题。我在一个android项目上,我从我的MainActivity类中完成了一个socketconnection,它扩展了Activity。然后我创建了另一个名为 SmsReceiver 的类,它扩展了 BroadcastReceiver,这样我就可以获取发送到我的手机(模拟器)的消息。现在我需要 SmsReceiver 类来使用 MainActivity 类中的输出流对象,但我不知道如何访问它。我无法创建 MainActivity 的新实例。
我可以以某种方式将输出流对象发送到 SmsReceiver 类吗?我希望你们中的一些人得到一些提示,提前谢谢!
好的,现在我已经选择了接口解决方案,但我又被卡住了!
这是我的课程:
主要活动:
public class MainActivity extends Activity implements MainInterface
{
try {
out = new PrintWriter(clientSocket.getOutputStream());
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException ex) {
System.err.println("Error in creating Streams:" + ex.toString());
return;
}
public PrintWriter getOutputStream() {
return out;
}
}
主界面:
public interface MainInterface {
public PrintWriter getOutputStream();
}
短信接收者:
public class SmsReceiver extends BroadcastReceiver{
MainInterface mainInterface = new MainActivity(); ///// <------
PrintWriter out; //// <--------
@Override
public void onReceive(Context context, Intent intent) {
mainInterface.getOutputStream(); ////// <------------
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if(bundle != null){
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for(int i = 0; i < pdusObj.length; i++){
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
out.println("senderNum: "+ senderNum + "; message: " + message);
out.flush(); /// these two lines
}
}
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
}
由于某种原因,我通过接口获得的 PrintWriter 是null,桌面上的输入流(这是在执行out.println()时应该接收消息的程序)甚至没有收到消息,它只是被阻止了in.readLine()。我是在以错误的方式实例化接口还是发生了什么?
logcat 错误打印是: 09-15 14:13:55.880: E/SmsReceiver(1361): Exception smsReceiverjava.lang.NullPointerException