Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取服务中的意图返回NullPointerException_Android_Service - Fatal编程技术网

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
,请告知我们。