2012-11-02 84 views
0

我发布了一个应用程序,我需要将几个hunderd kb大小的ogg文件复制到用户的SD卡上。很快我收到了错误报告。至于我担心的问题,可能是因为道路不适合特定的手机上:尝试向SD卡添加路径时出现Nullpointer异常

String path = "/sdcard/file.ogg"; 

      File file = new File(Environment.getExternalStorageDirectory(), "file.ogg"); 
      if (!file.exists()) { 


       InputStream in = getResources().openRawResource(R.raw.file); 
       FileOutputStream out = null; 
       try { 
        out = new FileOutputStream(path); 
       } catch (FileNotFoundException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       byte[] buff = new byte[1024]; 
       int read = 0; 

       try { 
        while ((read = in.read(buff)) > 0) { 
         out.write(buff, 0, read); 
        } 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } finally { 
        try { 
         in.close(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        try { 
         out.close(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 

所以该报告是:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.caodeveloping.androgangnam/com.caodeveloping.androgangnam.Main}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) 
at android.app.ActivityThread.access$1500(ActivityThread.java:121) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3701) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at com.caodeveloping.androgangnam.Main.onCreate(Main.java:388) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 
... 11 more 

而第388行是out.close( );/sdcard /是否可能在该手机上不合适?什么会造成这种情况?提前致谢!

更新,这个?

String path= Environment.getExternalStorageDirectory().getAbsolutePath(); 
path += "/file.ogg"; 

回答

1

两个问题:

一)显然,你试图关闭文件(out.close()),事件如果您无法打开

B)我会建议使用Environment.getExternalStorageDirectory(),而不是硬编码的目录名称“/ sdcard”。不能保证SD卡将安装到此路径。这正是Environment.getExternalStorageDirectory()API的原因。

此外,我建议检查这个错误处理的整个代码(如果东西不能打开,阅读等)

+0

更新我的代码。这是否是正确的方法?最底层的小代码。 –

+0

是的。然而。我建议添加其他检查/处理异常(对于这种情况,如果由于其他原因无法打开文件)。 –

相关问题