首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NullPointerException in FileObserver - Android

NullPointerException in FileObserver - Android
EN

Stack Overflow用户
提问于 2013-09-17 17:31:40
回答 2查看 375关注 0票数 0

我现在正在编写FileObserver代码。我有下面的代码,如果我运行它,我将得到NullPointerException。

代码语言:javascript
复制
public class FileModificationService extends Service{
    private MyFileObserver fileOb;
    private static final int MAX_FO = 1;
    private List<MyFileObserver> fileOb_list = new ArrayList<MyFileObserver>();
    @Override
    public void onCreate() {
        if (!EnvironmentUtilsStatic.is_external_storage_available()) {
            Toast.makeText(FileModificationService.this, "SDCARD is not available!", Toast.LENGTH_SHORT).show();
            return;
        }
        File sdcard = new File("/storage/sdcard/DCIM/Camera/SAMPLE IMAGES/");
        if (sdcard == null) {
            return;
        } else {
            fileOb_list.clear();
            num_of_fos = 0;
            createFileObs(sdcard);
        }
    }

    //only create fileobserver for folders
    int num_of_fos = 0;
    private void createFileObs(File f) {
        if (num_of_fos > MAX_FO) {
            return;
        }
        if (!f.isDirectory()) {
            MyFileObserver aFileOb = new MyFileObserver(f.getAbsolutePath());
            fileOb_list.add(aFileOb);
        } else {
            fileOb = new MyFileObserver(f.getAbsolutePath());
            MyFileObserver aFileOb = new MyFileObserver(f.getAbsolutePath());
            fileOb_list.add(aFileOb);
            num_of_fos++;
            try {
                for (File currentFile : f.listFiles()) {
                    createFileObs(currentFile);
                }
            } catch (Exception e) {
                Log.e("Error", e.toString());
            }
        }
    }

    @Override
    public void onStart(Intent intent, int startid) {
        fileOb.startWatching();
fileOb = new MyFileObserver("/storage/sdcard/DCIM/Camera/SAMPLE IMAGES/");// added code
        for (int i = 0; i < fileOb_list.size(); ++i) { //This is line no. 60
            fileOb_list.get(i).startWatching();
        }
        Toast.makeText(this.getApplicationContext(), "start monitoring file modification", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onDestroy() {
        fileOb.stopWatching();
        for (int i = 0; i < fileOb_list.size(); ++i) {
            fileOb_list.get(i).stopWatching();
        }
        Toast.makeText(this.getApplicationContext(), "stop monitoring file modification", Toast.LENGTH_SHORT).show();
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
}

我收到了下面的日志-

代码语言:javascript
复制
09-17 13:05:55.915: E/AndroidRuntime(2596): FATAL EXCEPTION: main
09-17 13:05:55.915: E/AndroidRuntime(2596): java.lang.RuntimeException: Unable to start service roman10.tutorial.fileobserver.FileModificationService@b11293c0 with Intent { cmp=roman10.tutorial.fileobserver/.FileModificationService }: java.lang.NullPointerException
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2721)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.app.ActivityThread.access$1900(ActivityThread.java:141)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.os.Looper.loop(Looper.java:137)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.app.ActivityThread.main(ActivityThread.java:5103)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at java.lang.reflect.Method.invokeNative(Native Method)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at java.lang.reflect.Method.invoke(Method.java:525)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at dalvik.system.NativeStart.main(Native Method)
09-17 13:05:55.915: E/AndroidRuntime(2596): Caused by: java.lang.NullPointerException
09-17 13:05:55.915: E/AndroidRuntime(2596):     at roman10.tutorial.fileobserver.FileModificationService.onStart(FileModificationService.java:60)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.app.Service.onStartCommand(Service.java:450)
09-17 13:05:55.915: E/AndroidRuntime(2596):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2704)
09-17 13:05:55.915: E/AndroidRuntime(2596):     ... 10 more

实际上,这段代码以前是起作用的。我没有对代码做任何修改。但是,当我尝试运行这段代码时,当我将模拟器从谷歌更改为英特尔x86后,问题就开始了。但是,我试图将仿真器转换回Google。但同时,代码也不起作用。

我不明白,为什么这段代码不能工作。

请带一些建议,如果可能的话,用教程指导我。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-17 17:35:30

fileOb.startWatching()中使用onStart()之前,您需要初始化它

票数 1
EN

Stack Overflow用户

发布于 2013-09-17 17:54:17

我将FileObserver变量初始化为-

fileOb = new MyFileObserver(String path_to_my_folder);

请在问题中找到更新的代码。这个解决方案对我有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18856249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档