使用try-catch语句时出现NullPointException

-1 java android android-intent android-service

现在我有一个活动,我希望通过该活动调用名为MyService的服务.我写

Intent i =new Intent(this,MyService.class); 
i.putExtra("s", s);
startService(i);
Run Code Online (Sandbox Code Playgroud)

在活动中,我输入了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();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,我得到了一个N​​ullPointException

s=i.getStringExtra("s").toString();

请问谁可以告诉我哪里出错了,我该怎么办,谢谢.

然后,我得到了我的应用程序的日志,其包名为"com.TsyQi.Sensor"


java.lang.RuntimeException:无法使用Intent {cmp = com.TsyQi.Sensor/.MyService}启动服务com.TsyQi.Sensor.MyService@26abf3ed:

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)
Run Code Online (Sandbox Code Playgroud)

引起:

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'java.lang.String java.lang.String.toString()'

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
Run Code Online (Sandbox Code Playgroud)

Bla*_*elt 6

 Intent i=new Intent();
 s=i.getStringExtra("s").toString();
Run Code Online (Sandbox Code Playgroud)

你只需创建Intent i,因此它不包含任何键的字符串s,getStringExtra返回null,调用toStringnull对象,将使你的应用程序崩溃NPE.您可能希望使用intentget get作为参数onStart,而不是创建新参数