本文介绍了Android的getAssets()方法将抛出NullPointerException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从服务我的应用程序的资产,我得到nullpointexception。
我发现关于它。但是几篇文章我不明白的地方我的错误。
在哪儿code:
公共类OCRService扩展IntentService {私有静态最后弦乐TAG =OCRService;
公共静态最后弦乐DATA_PATH = Environment.getExternalStorageDirectory()的toString()+/ SimpleAndroidOCR /;
公共OCRService(){
超级(OCRService);
字符串路径=新的String(DATA_PATH +tessdata /);
文件DIR =新的文件(路径);
如果(新文件(路径).exists()及!&安培;!dir.mkdirs()){
Log.e(TAG,错误:目录的创建+路径+关于SD卡失败);
返回;
}其他{
Log.v(TAG,创建目录+SD卡上的路径+);
如果(!(新文件(DATA_PATH +tessdata /+eng.traineddata))。存在()){
尝试{ AssetManager assetManager = getAssets();
对于(字符串的文件:assetManager.list(tessdata)){
InputStream的时间= assetManager.open(tessdata /+文件);
出的OutputStream =新的FileOutputStream(DATA_PATH +tessdata /+文件);
字节[] buf中=新的字节[1024];
INT LEN;
而((LEN = in.read(BUF))大于0){
out.write(BUF,0,LEN);
}
附寄();
out.close();
}
Log.v(TAG,复制OCR traineddata sacceded);
}赶上(IOException异常五){
Log.e(TAG,是无法复制OSR traineddata+ e.toString());
}
}
}
}
在哪里是个例外:
致命异常:主要
了java.lang.RuntimeException:无法实例化服务com.pc.droidhelper.services.OCRService:显示java.lang.NullPointerException
在android.app.ActivityThread.handleCreateService(ActivityThread.java:2241)
在android.app.ActivityThread.access $ 1600(ActivityThread.java:127)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1205)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:4476)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:816)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583)
在dalvik.system.NativeStart.main(本机方法)
显示java.lang.NullPointerException:产生的原因
在android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
在com.pc.droidhelper.services.OCRService<&初始化GT;(OCRService.java:41)
在java.lang.Class.newInstanceImpl(本机方法)
在java.lang.Class.newInstance(Class.java:1319)
在android.app.ActivityThread.handleCreateService(ActivityThread.java:2238)
... 10个
你可以看到getAssets从服务调用。和我有背景有。我已阅读,我chould使用getAssets从主要活动。请电话我为什么,有什么区别。
解决方案
The problem i think is here:
AssetManager assetManager = getAssets();
for (String file : assetManager.list("tessdata")) {
InputStream in = assetManager.open("tessdata/" + file);
if assetManager.list("tessdata") returns a null (that there is no tessdata
), that null goes into String file
as one entry, then you're calling
InputStream in = assetManager.open("tessdata/" + file);
"tessdata/" + file
will not exist if "tessdata"
didn't exist
So, the solution might be:
Solution
for (String file : assetManager.list("tessdata")) {
if(file!=null){
InputStream in = assetManager.open("tessdata/" + file);
...
}
}
这篇关于Android的getAssets()方法将抛出NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!