【发布时间】:2013-02-06 21:46:32
【问题描述】:
我有一个简单的问题。
我在主要活动中声明了文本视图,并从 XML (findViewById) 创建了它。我想将此值传递给广播接收器的子类。以下是我的广播构造函数:
public Broadcast(TextView text_dBm) {
this.text_dBm = text_dBm;
}
在我的主要活动中,我创建了一个新的广播对象并在其中传递我的 textview 值,如下所示:
new Broadcast(text_dBm);
但我的text_dBm 仍然出现空指针异常。无论如何(除了静态方法)在活动和广播接收器之间传递值吗?
哦,是的。我的广播接收器以编程方式注册(在服务中),并且运行良好。
感谢您的宝贵时间!
P.S:我已经在 SO 中检查了一些线程,但我没有找到答案:
How to pass value from an activity in an broadcast receiver?
主要活动类:
public class MainActivity extends Activity {
TextView text_dBm, text_time, text_rssi;
Intent startServiceFromActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text_dBm = (TextView) findViewById(R.id.textView_dBm);
new Broadcast(text_dBm);
startServiceFromActivity = new Intent(this, WifiService.class);
startService(startServiceFromActivity);
}
}
广播接收器类:
public class Broadcast extends BroadcastReceiver {
WifiInfo wifiInfo;
WifiManager wifiManager_service;
TextView text_dBm;
public Broadcast(WifiManager wifiManager_service) {
this.wifiManager_service = wifiManager_service;
}
public Broadcast(TextView text_dBm) {
this.text_dBm = text_dBm;
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("RECEIVER", "Receiver running"); // LOG
text_dBm.setText("textview"); // nullpointerexception
}
}
【问题讨论】:
-
我做了,请看:)
-
你确定你有一个有效的viewId吗?根据文档,如果没有找到视图,
findViewById(int)将返回 null。 -
查看 100% 有效。检查了 3 次。
-
基本上你只是想改变settext的值吧???
-
是的。从广播接收器。由于广播接收器在 UI 线程中运行,这是可能的,但我不知道如何将在主活动中创建的值引用到广播接收器
标签: java android android-activity broadcastreceiver