Java FileObserver-Android中的NullPointerException
我现在正在编写FileObserver代码。我有下面的代码,如果我运行它,就会得到NullPointerExceptionJava FileObserver-Android中的NullPointerException,java,android,nullpointerexception,fileobserver,Java,Android,Nullpointerexception,Fileobserver,我现在正在编写FileObserver代码。我有下面的代码,如果我运行它,就会得到NullPointerException public class FileModificationService extends Service{ private MyFileObserver fileOb; private static final int MAX_FO = 1; private List<MyFileObserver> fileOb_list = new A
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;
}
}
这段代码以前确实在工作。我没有对代码做任何更改。但是,当我尝试运行这段代码时,在将模拟器从Google更改为Intel x86之后,问题就开始了。但是,我试图将模拟器转换回Google。但是,代码也不起作用
我不明白,为什么这个代码不起作用
请给我一些建议,如果可能的话,请给我一些教程。提前感谢。在
fileOb.startWatching()
中使用它之前,您需要初始化fileOb
,onStart()我已将FileObserver变量初始化为-
fileOb=newmyfileobserver(指向我的文件夹的字符串路径)代码>
请在问题中找到更新的代码。这个解决方案对我很有效。也发布main
方法定义。这将有助于查看您是否已初始化fileOb
。感谢您的回复@TheKojuEffect,当我初始化它时,此时FileObserver将变为null。那么,该怎么办呢?您已经在createFileObs()
中编写了初始化fileOb
的代码。也许您应该在调用onStart()
之前调用createFileObs()
在fileOb.startWatching()之后初始化fileOb
:是的,@TheKojuEffect,这是个错误:-p明白了!非常感谢。
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