Android-在外部存储器上保存数据

Android-在外部存储器上保存数据,android,Android,我在我的项目中的原始文件夹中有一个名为“s1”的音频文件,我将以下代码放在主屏幕上的一个按钮上,当我运行emulator并按run时,它会使程序崩溃。如果有人能提供任何帮助或解决方案,我将永远感激 public void fileSetup() { File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC); String name1 = "Zen1"; F

我在我的项目中的原始文件夹中有一个名为“s1”的音频文件,我将以下代码放在主屏幕上的一个按钮上,当我运行emulator并按run时,它会使程序崩溃。如果有人能提供任何帮助或解决方案,我将永远感激

public void fileSetup() {

    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
    String name1 = "Zen1";
    File file1 = new File(path, name1 + ".mp3");
    path.mkdirs();
    InputStream is1 = getResources().openRawResource(R.raw.s1); 
    try {
         OutputStream os1 = new FileOutputStream(file1);
         byte[] data1 = new byte [is1.available()]; 
         is1.read(data1);
         os1.write(data1);
         is1.close();
         os1.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}
Logcat输出:

01-24 23:00:42.137: E/AndroidRuntime(1064): FATAL EXCEPTION: main
01-24 23:00:42.137: E/AndroidRuntime(1064): java.lang.IllegalStateException: Could not find a method saveData(View) in the activity class com.malthorn.zenstatemeditation.MainActivity for onClick handler on view class android.widget.Button with id 'button1'
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.view.View$1.onClick(View.java:3620)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.view.View.performClick(View.java:4240)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.view.View$PerformClick.run(View.java:17721)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.os.Handler.handleCallback(Handler.java:730)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.os.Looper.loop(Looper.java:137)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.app.ActivityThread.main(ActivityThread.java:5103)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at java.lang.reflect.Method.invokeNative(Native Method)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at java.lang.reflect.Method.invoke(Method.java:525)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at dalvik.system.NativeStart.main(Native Method)
01-24 23:00:42.137: E/AndroidRuntime(1064): Caused by: java.lang.NoSuchMethodException: saveData [class android.view.View]
01-24 23:00:42.137: E/AndroidRuntime(1064):     at java.lang.Class.getConstructorOrMethod(Class.java:423)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at java.lang.Class.getMethod(Class.java:787)
01-24 23:00:42.137: E/AndroidRuntime(1064):     at android.view.View$1.onClick(View.java:3613)
01-24 23:00:42.137: E/AndroidRuntime(1064):     ... 11 more

如果您不为logcat提供例外,我们将无能为力

完全盲目的猜测是你错过了许可

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

确保您注意到“保存”一词上的a改为e

要想得到真正的帮助,你需要提供的不仅仅是“程序崩溃”。您必须提供logcat输出,以便我们能够准确地看到发生了什么。添加了logcat,很抱歉,请确定logcat seema,以指示您正在某处调用save data,尽管我希望在编译时会显示出来。问题似乎不在于你的保存代码,你能发布包含这个的整个课程(活动)吗?我不敢相信这么明显的答案就在我面前!哈哈,非常感谢!如果我把它放在活动的OnCreate中,它还能工作吗?就像在oncreate中一样,我放了“saveData();”是的,我认为应该这样做,但请确保捕获任何异常,否则它可能会再次导致无法启动的活动(这是假设您从XML中删除了android:onClick),如果它修复了您的问题,请将我的答案标记为已接受,谢谢
  public void saveData(View view) {