致命异常主要在onclick

时间:2017-02-14 17:14:16

标签: java android

我得到E / AndroidRuntime:致命异常:主要在com.test.megatest.Main4Activity $ 1.onClick(Main4Activity.java:37)。

我已经在这个论坛上阅读了大量帖子,但我无法弄清楚我失踪了什么,

这是Main4Activity.java:

package com.test.megatest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main4Activity extends AppCompatActivity {
EditText inputText;
TextView response;
    Button saveButton, readButton;

    private String filename = "SampleFile.txt";
    private String filepath ="MyFileStorage";
    File myExternalFile;
    String myData ="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        inputText = (EditText) findViewById(R.id.myInputText);
        response = (TextView) findViewById(R.id.response);

        saveButton =(Button) findViewById(R.id.saveExternalStorage);
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    FileOutputStream fos = new FileOutputStream(myExternalFile);  //LINE 37
                    fos.write(inputText.getText().toString().getBytes());
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                inputText.setText("");
                response.setText("SampleFile.txt saved to somewhere..");

            }
        });
    }
}

这里有人能指出我正确的方向吗? :)

3 个答案:

答案 0 :(得分:1)

您尝试打开输出流的文件为NULL。 您将其声明为成员但从未对其进行初始化。

答案 1 :(得分:1)

您的Main4Activity有一个"文件"变量:

File myExternalFile;


但是没有为该变量分配任何对象/值您试图在其中使用它:

FileOutputStream fos = new FileOutputStream(myExternalFile);


显然你会得到一个例外:P

  

你应该初始化" myExternalFile"使用java.io.File中指定的4个公共构造函数中的任何一个(取决于您的用例)。   
例如:

// If you need a "Persistent" file in private directory of your application
//
myExternalFile = new File(this.getFilesDir() ,"name_of_your_file.txt");
//
// or
// If you need a "Cache" file
myExternalFile = new File(this.getCacheDir() ,"name_of_your_file.txt");
  

Android文件系统上面文件的位置是:   
#Persistent: /data/data/com.test.megatest/files   
(任何文件管理器应用程序)/Android/data/com.test.megatest/files   

#Cache: /data/data/com.test.megatest/cache   
(任何文件管理器应用程序)/ Android/data/com.test.megatest/files


参考:
1)java.io.FileOutputStream -> FileOutputStream (File file) public constructor
"创建一个文件输出流以写入由指定的File对象表示的 文件 "

答案 2 :(得分:1)

将文件初始化为

File myExternalFile=new File("SampleFile.txt");