首页 > 解决方案 > 尝试在 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);
    }
}

标签: javaandroid

解决方案


The first thing that springs out to me is this line:

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

You are defining path inline within the class definition, which is equivalent to setting it within the MainActivity() constructor. This is before the Activity Lifecycle has begun, therefore this as a Context does not exist yet. You will need to define path later on in the activity lifecycle, for example during 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();
    }

    ...

推荐阅读