当我使用 try-catch 语句时出现 NullPointErexception
NullPointException when I use try-catch statement
现在我有一个 activity,我想通过它调用名为 MyService 的服务。
我写了
Intent i =new Intent(this,MyService.class);
i.putExtra("s", s);
startService(i);
在 activity 中,而我的 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 with Intent { 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.access00(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
Intent i=new Intent();
s=i.getStringExtra("s").toString();
您刚刚创建了 Intent i
,因此它不包含键 s
的任何字符串,使得 getStringExtra
return null
,调用toString
到 null 对象,将使您的应用程序崩溃 NPE
。您可能想使用在 onStart
中作为参数获得的 intent
,而不是创建一个新的
错误在这里:
Intent i=new Intent();
s=i.getStringExtra("s").toString();
sendData(s);
您正在创建一个新的 Intent,它没有所需的 's' 额外字符串。
要检索值,请使用在 onStart()
中收到的意图。
现在我有一个 activity,我想通过它调用名为 MyService 的服务。 我写了
Intent i =new Intent(this,MyService.class);
i.putExtra("s", s);
startService(i);
在 activity 中,而我的 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 with Intent { 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.access00(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
Intent i=new Intent();
s=i.getStringExtra("s").toString();
您刚刚创建了 Intent i
,因此它不包含键 s
的任何字符串,使得 getStringExtra
return null
,调用toString
到 null 对象,将使您的应用程序崩溃 NPE
。您可能想使用在 onStart
中作为参数获得的 intent
,而不是创建一个新的
错误在这里:
Intent i=new Intent();
s=i.getStringExtra("s").toString();
sendData(s);
您正在创建一个新的 Intent,它没有所需的 's' 额外字符串。
要检索值,请使用在 onStart()
中收到的意图。