我使用try-catch语句时的NullPointErexception

时间:2015-01-05 13:57:08

标签: java android android-intent android-service

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

Intent i =new Intent(this,MyService.class); 
i.putExtra("s", s);
startService(i);

在活动中,而我的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:无法使用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)

引起:

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

错误在于:

Intent i=new Intent();
s=i.getStringExtra("s").toString();
sendData(s);

您正在创建一个新的Intent,它没有必要的'字符串额外。

要检索该值,请使用onStart()中收到的意图。