![](/img/trans.png)
[英]Passing data from android activity to broadcast receiver on device boot up
[英]NullPointerExceptoin when passing value from activity to broadcast receiver
我有一个简单的问题。
我已经在主要活动中声明了文本视图,并从XML( findViewById
)创建了它。 我想将此值传递给广播接收器的子类。 以下是我的Broadcast构造函数:
public Broadcast(TextView text_dBm) {
this.text_dBm = text_dBm;
}
在我的主要活动中,我创建一个新的广播对象,并在其中传递我的textview值,如下所示:
new Broadcast(text_dBm);
但是我的text_dBm
仍然出现空指针异常。 无论如何(除了静态方法之外)是否有在活动和广播接收者之间传递值的方法?
哦,是的。 我的广播接收器已通过编程方式注册(在使用中),并且运行良好。
感谢您的时间!
PS: 我已经在SO中检查了一些线程,但是没有找到答案: 如何通过广播接收器中的活动传递值?
主要活动类别:
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
}
}
通过意图传递数据
活动-
Intent i = new Intent(Activity.this, Broadcast.class);
Bundle b = new Bundle();
b.putString("key", "value");
i.putExtras(b);
startActivity(i);
在广播接收器类中的onReceive
方法
@Override
public void onReceive(Context context, Intent intent)
{
String result = intent.getString("key");
// your method
}
您无法使用Intent传递视图。 要执行您想做的事情,您将需要广播接收器成为您活动的内在类。 当活动开始与未注册的活动时停止接收器应当予以登记。 否则,您将泄漏内存。 这意味着您仅在实际处于活动屏幕本身时才能接收消息。
如果您需要能够在活动之外接收广播,则需要:
根据您的评论:
-
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbmView = (TextView) findViewById(R.id.textView_dBm);
}
@Override
protected void onStart() {
super.onStart();
IntentFilter intentFilter = new IntentFilter("com.example.broadcasts.DBM_UPDATE");
registerReceiver(receiver, intentFilter);
}
@Override
protected void onStop() {
unregisterReceiver(receiver);
super.onStop();
}
private TextView dbmView;
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
dbmView.setText(intent.getStringExtra("dbm"));
}
}
}
在服务中:
Intent i = new Intent("com.example.broadcasts.DBM_UPDATE");
i.putExtra("dbm", "it works!");
sendBroadcast(i);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.