2012-09-11 61 views
1

我有一个方法,试图写入到SD卡上的文本文件在AlarmReceiver中。 之前,我把它移动到AlarmReceiver的方法完美地工作,但现在却在logcat中以下崩溃:SD卡写入方法崩溃在AlarmReceiver

09-11 10:36:44.395: D/AndroidRuntime(946): Shutting down VM 
09-11 10:36:44.395: W/dalvikvm(946): threadid=1: thread exiting with uncaught exception   (group=0x409c01f8) 
09-11 10:36:44.425: E/AndroidRuntime(946): FATAL EXCEPTION: main 
09-11 10:36:44.425: E/AndroidRuntime(946): java.lang.RuntimeException: Unable to start receiver com.exercise.AndroidSYSinfo.AlarmReceiver: java.lang.NullPointerException 
09-11 10:36:44.425: E/AndroidRuntime(946): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2126) 
09-11 10:36:44.425: E/AndroidRuntime(946): at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
09-11 10:36:44.425: E/AndroidRuntime(946): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197) 
09-11 10:36:44.425: E/AndroidRuntime(946): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-11 10:36:44.425: E/AndroidRuntime(946): at android.os.Looper.loop(Looper.java:137) 
09-11 10:36:44.425: E/AndroidRuntime(946): at android.app.ActivityThread.main(ActivityThread.java:4424) 
09-11 10:36:44.425: E/AndroidRuntime(946): at java.lang.reflect.Method.invokeNative(Native Method) 
09-11 10:36:44.425: E/AndroidRuntime(946): at java.lang.reflect.Method.invoke(Method.java:511) 
09-11 10:36:44.425: E/AndroidRuntime(946): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-11 10:36:44.425: E/AndroidRuntime(946): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-11 10:36:44.425: E/AndroidRuntime(946): at dalvik.system.NativeStart.main(Native Method) 
09-11 10:36:44.425: E/AndroidRuntime(946): Caused by: java.lang.NullPointerException 
09-11 10:36:44.425: E/AndroidRuntime(946): at java.io.Writer.write(Writer.java:141) 
09-11 10:36:44.425: E/AndroidRuntime(946): at com.exercise.AndroidSYSinfo.AlarmReceiver.writeSD(AlarmReceiver.java:318) 
09-11 10:36:44.425: E/AndroidRuntime(946): at com.exercise.AndroidSYSinfo.AlarmReceiver.onReceive(AlarmReceiver.java:182) 
09-11 10:36:44.425: E/AndroidRuntime(946): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2119) 

这是相关代码:

public void writeSD(Context context) 
{ 
     //Toast.makeText(context,"Saving sdcardstats.txt..." , Toast.LENGTH_SHORT).show(); 
     // 
     // Write SDCard stats to file 
     // 
     try 
      { 
      FileOutputStream fOut1 = context.openFileOutput("sdcardstats.txt", Context.MODE_PRIVATE); 
      OutputStreamWriter osw1 = new OutputStreamWriter(fOut1);  
      osw1.write(string); 
      osw1.flush(); 
      osw1.close();  

      } 
      catch (IOException ioe) 
      { 

      ioe.printStackTrace(); 
      } //end catch 


} // end of writeSD() 
+1

'string'是什么?你检查过它是否为空? – user370305

+0

http://www.java-samples.com/showtutorial.php?tutorialid=1523 –

+0

你有没有在清单中定义你的接收器? – breceivemail

回答

0

字符串不是空

这里是源代码片段出现错误的位置,用行号:

140 public void write(String str) throws IOException { 
141  write(str, 0, str.length()); 
142 } 

,个别语句抛出一个NullPointerException唯一方法是,如果strnull。因此,尽管您可能认为string不是null,但您的堆栈跟踪指示了其他情况。

+0

或者如果osw1为空。 –

+0

@PhilipSheard:不,因为'NullPointerException'会在他的代码中产生,而不是在'java.io.Writer'的第141行。 – CommonsWare

+0

@Commonsware:尊重,我不同意你的看法。我使用System.out.println(string)将此变量的内容打印到Logcat中;它绝对不是空的。 – Kevmeister