本文介绍了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异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-03 07:24