从活动传递群众演员意图引发NullPointerException异常 [英] Passing extras from Activity to Intent throws NullPointerException
问题描述
这是一个分叉了一个不同的问题一个问题。
我传递了两个字符串从我的主要活动为孩子服务,这是好的,但在主要活动死亡,服务引发NullPointerException异常试图抓住两个字符串。
从MainActivity:
意向书I =新意图(这一点,PebbleService.class);
i.putExtra(引用,报价[0]);
i.putExtra(作者,报价[1]);
startService(ⅰ);
从PebbleService:
公众诠释onStartCommand(意向意图,诠释旗帜,INT startId){
super.onStartCommand(意向,旗帜,startId); 最后弦乐笔者= intent.getStringExtra(作家);
最后弦乐报价= intent.getStringExtra(报价); //定义AppMessage行为
如果(appMessageReciever == NULL){
appMessageReciever =新PebbleKit.PebbleDataReceiver(WATCHAPP_UUID){ @覆盖
公共无效receiveData的(上下文的背景下,INT transactionId,有无,PebbleDictionary数据){
//始终ACK
PebbleKit.sendAckToPebble(背景下,transactionId,有无); //发送到KEY_QUOTE卵石
PebbleDictionary出=新PebbleDictionary();
out.addString(KEY_QUOTE,引号);
out.addString(KEY_AUTHOR,作家);
PebbleKit.sendDataToPebble(getApplicationContext(),WATCHAPP_UUID,淘汰);
}
}; //添加AppMessage能力
PebbleKit.registerReceivedDataHandler(这一点,appMessageReciever);
} 返回START_STICKY;
}
从logcat的错误:
10月5日至26日:29:52.972 4147-4147 /? E / AndroidRuntime:致命异常:主要
工艺:net.thevgc.quotes,PID:4147
了java.lang.RuntimeException:无法使用空启动服务net.thevgc.quotes.PebbleService@423eb138:显示java.lang.NullPointerException
在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2732)
在android.app.ActivityThread.access $ 2100(ActivityThread.java:139)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1307)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5086)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)
显示java.lang.NullPointerException:产生的原因
在net.thevgc.quotes.PebbleService.onStartCommand(PebbleService.java:34)
在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2715)
在android.app.ActivityThread.access $ 2100(ActivityThread.java:139)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1307)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5086)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)
由于每<一个href=\"http://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent,%20int,%20int)\"相对=nofollow>文档:
意图 - ...是否正在重新启动该服务,这可能是空
块引用>因此检查
空
目的:公众诠释onStartCommand(意向意图,诠释旗帜,INT startId){
INT CMD = super.onStartCommand(意向,旗帜,startId); 如果(意向== NULL)回报CMD; 最后弦乐笔者= intent.getStringExtra(作家);
最后弦乐报价= intent.getStringExtra(报价); ...
}This is a problem that forked off a different issue.
I'm passing two strings from my main activity to a child service, which is fine, but when the main activity dies, the service throws a NullPointerException trying to grab the two strings.
From MainActivity:
Intent i = new Intent(this, PebbleService.class); i.putExtra("quote", quote[0]); i.putExtra("author", quote[1]); startService(i);
From PebbleService:
public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); final String author = intent.getStringExtra("author"); final String quote = intent.getStringExtra("quote"); // Define AppMessage behavior if (appMessageReciever == null) { appMessageReciever = new PebbleKit.PebbleDataReceiver(WATCHAPP_UUID) { @Override public void receiveData(Context context, int transactionId, PebbleDictionary data) { // Always ACK PebbleKit.sendAckToPebble(context, transactionId); // Send KEY_QUOTE to Pebble PebbleDictionary out = new PebbleDictionary(); out.addString(KEY_QUOTE, quote); out.addString(KEY_AUTHOR, author); PebbleKit.sendDataToPebble(getApplicationContext(), WATCHAPP_UUID, out); } }; // Add AppMessage capabilities PebbleKit.registerReceivedDataHandler(this, appMessageReciever); } return START_STICKY; }
Error from Logcat:
05-26 10:29:52.972 4147-4147/? E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: net.thevgc.quotes, PID: 4147 java.lang.RuntimeException: Unable to start service net.thevgc.quotes.PebbleService@423eb138 with null: java.lang.NullPointerException at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2732) at android.app.ActivityThread.access$2100(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5086) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at net.thevgc.quotes.PebbleService.onStartCommand(PebbleService.java:34) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2715) at android.app.ActivityThread.access$2100(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5086) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)
解决方案As per the documentation:
intent - ... This may be null if the service is being restarted
Therefore check for
null
intent:public int onStartCommand(Intent intent, int flags, int startId) { int cmd = super.onStartCommand(intent, flags, startId); if (intent == null) return cmd; final String author = intent.getStringExtra("author"); final String quote = intent.getStringExtra("quote"); ... }
这篇关于从活动传递群众演员意图引发NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!