尝试在Android活动中执行简单命令时出错

时间:2019-07-04 11:05:32

标签: java android

我正在学习使用Java编写的Android应用程序读写简单的文件。但是我无法解决此初始错误!我想我因为this而不是上下文而收到此错误。该应用程序编译成功,但是在我的设备上安装后无法打开。

我没有做太多尝试,但是我在这里提供代码。我试图通过编辑文本视图接受一个简单的文本,然后使用“保存”按钮将其保存到Android中的文件中。

package com.example.filemaketest;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

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

public class MainActivity extends AppCompatActivity {
    String filename = "Testing-app-file.txt";
    File path = this.getFilesDir();

    //    File file = new File(path, filename);
//    FileOutputStream outputStream;
    public void save(View view) {
        EditText edit = (EditText) findViewById(R.id.infoText);
        String info = edit.getText().toString();
        Log.i("info", info);
        Toast.makeText(this, info + " button Pressed", Toast.LENGTH_LONG).show();
        Toast.makeText(this, " Saving", Toast.LENGTH_LONG).show();
//        try {
//            outputStream = openFileOutput(filename, this.MODE_PRIVATE);
//            outputStream.write(info.getBytes());
//            outputStream.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }

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

1 个答案:

答案 0 :(得分:1)

首先想到的是这一行:

public class MainActivity extends AppCompatActivity {
    String filename ="Testing-app-file.txt";
    File path= this.getFilesDir();           // <<< This line

您正在类定义中定义path内联,这等效于在MainActivity()构造函数中进行设置。这是在Activity Lifecycle开始之前,因此this作为Context尚不存在。您稍后需要在活动生命周期中定义path,例如在onCreate()期间:

public class MainActivity extends AppCompatActivity {
    String filename ="Testing-app-file.txt";
    File path;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        path = this.getFilesDir();
    }

    ...