Android 获取服务中的意图返回NullPointerException
我创建服务并从Android 获取服务中的意图返回NullPointerException,android,service,Android,Service,我创建服务并从MainActivity.class调用它,并将字符串额外放到意图中,但当我在onStart命令中调用getStringExtra时,它返回NullPointerException 这是我的密码: MainService.class: public class MainService extends Service { private WindowManager wm; private WindowManager.LayoutParams params; @Override
MainActivity.class
调用它,并将字符串额外放到意图中,但当我在onStart命令中调用getStringExtra
时,它返回NullPointerException
这是我的密码:
MainService.class:
public class MainService extends Service {
private WindowManager wm;
private WindowManager.LayoutParams params;
@Override
public IBinder onBind(Intent i) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
if (mView != null) {
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.removeView(mView);
}
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final String quote = intent.getStringExtra("quote");
Log.d("datastring",quote);
return super.onStartCommand(intent, flags, startId);
}
}
在MainActivity.class中,我调用了:
Intent i=new Intent(MainActivity.this, MainService.class);
i.putExtra("quote", "dataquote");
stopService(i);
如何从MainService中的MainActivity获取字符串?如果您想向
服务提供更多数据,您需要使用以下方法:
Intent intent = new Intent(MainActivity.this, MainService.class);
intent.putExtra("quote", "dataquote");
startService(intent);
这将启动服务,您应该能够在onStartCommand()
中获取数据intent
。如果服务
已在运行,则仍将使用新的意图调用onStartCommand()
。这是因为Service
组件本质上是单例的,所以一次只运行一个特定服务的实例
在您的情况下,您是通过stopService(intent)
提供数据的。不仅无法获取此意图
,而且您的服务也将在该语句后停止,因此,即使您可以读取数据,您也无法真正处理数据
如果您仍然需要停止服务
并同时传递数据,您应该检查。如果您想为服务
提供更多数据,您需要使用以下方法:
Intent intent = new Intent(MainActivity.this, MainService.class);
intent.putExtra("quote", "dataquote");
startService(intent);
这将启动服务,您应该能够在onStartCommand()
中获取数据intent
。如果服务
已在运行,则仍将使用新的意图调用onStartCommand()
。这是因为Service
组件本质上是单例的,所以一次只运行一个特定服务的实例
在您的情况下,您是通过stopService(intent)
提供数据的。不仅无法获取此意图
,而且您的服务也将在该语句后停止,因此,即使您可以读取数据,您也无法真正处理数据
如果您仍然需要停止服务
并同时传递数据,请检查。我们无法从停止服务
获取意图。昨天也有人问过这个问题,请检查这里:@Shaishav我如何在服务中获得意图?您是否尝试在main activity.class
中使用startService(I)
,而不是stopService(I)
?@DatNguyen it示例。不确定我是否理解您的答案,@ờiCơbả恩拉布ồn、 但是,如果您在清单中正确地声明了您的服务,然后在您的活动中调用startService(i)
,您应该能够在onStartCommand(…)
中获得StringExtra
。如果您在使用“startService(i)”时仍收到NPE
,请告知我们。我们无法从stopService
获得意向。昨天也有人问过这个问题,请检查这里:@Shaishav我如何在服务中获得意图?您是否尝试在main activity.class
中使用startService(I)
,而不是stopService(I)
?@DatNguyen it示例。不确定我是否理解您的答案,@ờiCơbả恩拉布ồn、 但是,如果您在清单中正确地声明了您的服务,然后在您的活动中调用startService(i)
,您应该能够在onStartCommand(…)
中获得StringExtra
。如果您在使用“startService(i)”时仍收到NPE
,请告知我们。