Java 使用意图从服务向活动发送数据时出现空指针异常
我正在使用Bundle将数据从服务类发送到主活动,但其发送为null 服务等级Java 使用意图从服务向活动发送数据时出现空指针异常,java,android,Java,Android,我正在使用Bundle将数据从服务类发送到主活动,但其发送为null 服务等级 Intent intent = new Intent(LocationService.this, MainActivity.class); Bundle b = new Bundle(); b.putString("final_address", addressText); intent.putExtras(b); startActivity(intent); public static final String
Intent intent = new Intent(LocationService.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("final_address", addressText);
intent.putExtras(b);
startActivity(intent);
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
sendBroadcast(intent);
public class LocationService extends Service {
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.e("service", "oncreate");
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, "hello");
sendBroadcast(intent);
}
}
主要活动
Intent intentReceived = getIntent();
Bundle b = intentReceived.getExtras();
address = b.getString("final_address");
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
address = bundle.getString(LocationService.ADDRESS_PATH);
}
}
};
public class MainActivity extends AppCompatActivity {
String address;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));
startService(new Intent(this, LocationService.class));
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
address = bundle.getString(LocationService.ADDRESS_PATH);
System.out.println("val"+ " = "+ address);
}
}
};
}
我也尝试过通过广播消息发送,但也失败了。请参见以下内容:
服务等级
Intent intent = new Intent(LocationService.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("final_address", addressText);
intent.putExtras(b);
startActivity(intent);
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
sendBroadcast(intent);
public class LocationService extends Service {
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.e("service", "oncreate");
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, "hello");
sendBroadcast(intent);
}
}
主要活动
Intent intentReceived = getIntent();
Bundle b = intentReceived.getExtras();
address = b.getString("final_address");
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
address = bundle.getString(LocationService.ADDRESS_PATH);
}
}
};
public class MainActivity extends AppCompatActivity {
String address;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));
startService(new Intent(this, LocationService.class));
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
address = bundle.getString(LocationService.ADDRESS_PATH);
System.out.println("val"+ " = "+ address);
}
}
};
}
并在create上的主活动中调用此函数
registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));
registerReceiver(接收者,新的意向过滤器(LocationService.ADDRESSIDENTIFY));
我也在舱单上声明了服役
<service
android:name="com.gampzz.bhojannearby.LocationService"
android:enabled="true">
</service>
我该怎么办..我错在哪里了???你的代码很完美,在我的情况下它正在工作。如果你遗漏了什么,请与我的联系。您是否在清单中的
应用程序
中定义您的服务
服务等级
Intent intent = new Intent(LocationService.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("final_address", addressText);
intent.putExtras(b);
startActivity(intent);
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
sendBroadcast(intent);
public class LocationService extends Service {
public static final String ADDRESSIDENTIFY = "address_identify";
public static final String ADDRESS_PATH = "address_path";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.e("service", "oncreate");
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, "hello");
sendBroadcast(intent);
}
}
活动
Intent intentReceived = getIntent();
Bundle b = intentReceived.getExtras();
address = b.getString("final_address");
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
address = bundle.getString(LocationService.ADDRESS_PATH);
}
}
};
public class MainActivity extends AppCompatActivity {
String address;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));
startService(new Intent(this, LocationService.class));
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
address = bundle.getString(LocationService.ADDRESS_PATH);
System.out.println("val"+ " = "+ address);
}
}
};
}
和mainfest
...
<service android:name=".LocationService"
android:enabled="true"/>
</application>
。。。
无需像下面这样使用LocalBroadcastManager发送广播:
private LocalBroadcastManager mBroadcastManger;
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
mBroadcastManger.sendBroadcast(mIntent);
将其置于服务的onCreate()
上
mBroadcastManger = LocalBroadcastManager.getInstance(this);
使用如下意图发送广播:
private LocalBroadcastManager mBroadcastManger;
Intent intent = new Intent(ADDRESSIDENTIFY);
intent.putExtra(ADDRESS_PATH, addressText);
mBroadcastManger.sendBroadcast(mIntent);
共享日志cat崩溃报告您需要
广播接收器
从服务
到活动
获取数据,同时在清单中声明您的接收器
@SadiqMdAsif给我发了一个链接来做这件事。看看那里,我用了那个链接的第8篇文章来发送数据,正如我在上面的问题中告诉你们的。请给我推荐一篇更好的文章,我想将数据从服务类发送到活动类。谢谢,先生,但我通过其他方式解决了问题。谢谢您的帮助