我有一个自定义库,需要定期将文件上传到我的服务器(以及其他任务)。所以我在我的库中为它创建了一个意图服务,我调用如下(注意,这不是任何活动的一部分,但我为它创建了一个新线程,我已经提供了上下文。到此为止的所有日志消息都被打印出来):
Intent logIntent = new Intent(mContext,LogIntentService.class);
logIntent.setAction("abc.xyz.org.mycustomlibrary.action.LOG");
File file = new File(mContext.getCacheDir(),localCache);
logIntent.putExtra(localCache, Uri.fromFile(file));
Log.d(TAG,"Log Intent Service invoked for file: " + file.toString()
+ " Cache Dir ="+mContext.getCacheDir()+ " Extra = " +
Uri.fromFile(file));
mContext.startService(logIntent);
Manifest更改如下:
<!--[START log_intentserver] -->
<service
android:name="org.mypackagename.LogIntentService"
android:exported="false"></service>
<!--[END log_intentserver] -->
在LogIntentService中,我有:
@Override
protected void onHandleIntent(Intent intent) {
Log.d("On Handle of LogIntent");
if (intent != null) {
final String action = intent.getAction();
if(ACTION_LOG.equals(action)) {
........
}
}
}
public LogIntentService() {
super(LogIntentService.class.getName());
}
在我的adb logcat上,我找到了给出的代码片段的日志消息,如下所示:
日志意图服务调用文件:/data/data/package.name/cache/LocalCache0缓存目录=/data/data/package.name.demo/cache额外=文件://data/data/package.name/cache/LocalCache0
,错误信息是:
W/dalvikvm( 2046): threadid=1: thread exiting with uncaught exception (group=0x41611ba8)
E/AndroidRuntime( 2046): FATAL EXCEPTION: main
E/AndroidRuntime( 2046): Process: package.name, PID: 2046
E/AndroidRuntime( 2046): java.lang.RuntimeException: Unable to instantiate service abc.xyz.org.mycustomlibrary.LogIntentService: java.lang.NullPointerException
E/AndroidRuntime( 2046): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2543)
E/AndroidRuntime( 2046): at android.app.ActivityThread.access$1800(ActivityThread.java:135)
E/AndroidRuntime( 2046): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
E/AndroidRuntime( 2046): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 2046): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 2046): at android.app.ActivityThread.main(ActivityThread.java:5001)
E/AndroidRuntime( 2046): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 2046): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 2046): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
E/AndroidRuntime( 2046): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
E/AndroidRuntime( 2046): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 2046): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 2046): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
E/AndroidRuntime( 2046): at abc.xyz.org.mycustomlibrary.LogIntentService.<init>(LogIntentService.java:33)
E/AndroidRuntime( 2046): at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime( 2046): at java.lang.Class.newInstance(Class.java:1208)
E/AndroidRuntime( 2046): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2540)
E/AndroidRuntime( 2046): ... 10 more
我读了很多类似的帖子,没有一个对我有帮助。我遗漏了什么吗?对于Android中的intent,我还是个新手,所以我可能会忽略一些重要的细节。
认为这个问题与意图本身完全无关。我试图获得应用程序上下文设置共享首选项在我的方法之外,就在LogIntentService类创建之后,像这样:
SharedPreferences prefs = getApplicationContext().getSharedPreferences("CacheFile", MODE_PRIVATE);
将行移动到OnHandleIntent方法时,问题已解决。
感谢您的支持和帮助!