【问题标题】:NullPointException when I use try-catch statement当我使用 try-catch 语句时出现 NullPointErexception
【发布时间】:2015-01-05 13:57:08
【问题描述】:

现在我有一个活动,我想通过它调用一个名为 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

【问题讨论】:

  • 在 try 语句中删除 Intent i=new Intent(); 并改用 intent
  • 我之前试过了,还是大小写错误...

标签: java android android-intent android-service


【解决方案1】:
 Intent i=new Intent();
 s=i.getStringExtra("s").toString();

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

【讨论】:

  • 但是当我使用intent而不是i时仍然出错。
  • 你能发布异常的堆栈跟踪吗?
【解决方案2】:

错误就在这里:

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

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

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

【讨论】:

  • 当我使用intent而不是i时尝试是没有用的……我该怎么办?
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多