Java 使用try-catch语句时出现NullPointException

Java 使用try-catch语句时出现NullPointException,java,android,android-intent,android-service,Java,Android,Android Intent,Android Service,现在我有一个活动,我想通过它调用一个名为MyService的服务。 我写 在活动中,当my MyService.java键入 @Override public void onStart(Intent intent, int startId) { // TODO: Implement this method super.onStart(intent, startId); connect(intent); try{ connect(intent);

现在我有一个活动,我想通过它调用一个名为MyService的服务。 我写

在活动中,当my MyService.java键入

@Override

public void onStart(Intent intent, int startId)
{
    // TODO: Implement this method
    super.onStart(intent, startId);
    connect(intent);
    try{
        connect(intent);
        Intent i=new Intent();
        s=i.getStringExtra("s").toString();
        sendData(s);
    } catch(IOError e)
    {
       Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}
但是当我运行代码时,我会得到一个NullPointException

s=i.getStringExtra(“s”).toString()

请问谁能告诉我哪里出了问题,我该怎么办,谢谢

然后,我得到了我的应用程序的日志,它的包名是“com.TsyQi.Sensor”


java.lang.RuntimeException:无法启动服务com.TsyQi.Sensor。MyService@26abf3ed意图{cmp=com.TsyQi.Sensor/.MyService}:

java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.String.toString()”

at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2882)
at android.app.ActivityThread.access$2100(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5233)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
at com.TsyQi.Sensor.MyService.onStart(MyService.java:227)
at android.app.IntentService.onStartCommand(IntentService.java:130)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2865)
... 9 more
原因:

java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.String.toString()”

at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2882)
at android.app.ActivityThread.access$2100(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5233)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
at com.TsyQi.Sensor.MyService.onStart(MyService.java:227)
at android.app.IntentService.onStartCommand(IntentService.java:130)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2865)
... 9 more

您只需创建Intent
i
,因此它不包含键
s
的任何字符串,使
getStringExtra
返回
null
,调用
toString
到null对象,将使您的应用程序因
NPE
而崩溃。您可能希望使用在
onStart
中作为参数获得的
intent
,而不是创建一个新的错误如下:

Intent i=new Intent();
s=i.getStringExtra("s").toString();
sendData(s);
您正在创建一个没有所需的额外“s”字符串的新意图


要检索该值,请使用在
onStart()

删除
intent i=new intent()中接收的intent
在您的try语句中使用
intent
instead之前我尝试过哪个仍然是错误的情况…但是当我使用intent而不是I时仍然出现错误。您可以发布异常的stacktrace吗?当我使用intent而不是I时尝试是没有用的…我该怎么办?