Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
195 views
in Technique[技术] by (71.8m points)

java - How do I save a text file in one android page and open it in another?

I am building an app where you input text into an EditText in one activity then you go to another where you press a button and then you get into the DiaryEntry page which is where the error is.

Here is the save() code to save the text from the EditText

private String textFile;
private String fileName;
...
public void save(View v){
        fileName = getApplication().getExternalFilesDir("/").getAbsolutePath();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss", Locale.US);
        Date now = new Date();
        textFile = "Vent2Me.text." + formatter.format(now) + ".txt";

        String text = inputFeelings.getText().toString();
        FileOutputStream fos = null;

        try {
            fos = openFileOutput(textFile, MODE_PRIVATE);
            fos.write(text.getBytes());

            inputFeelings.getText().clear();
            Toast.makeText(this, "Saved to " + getFilesDir() + "/" + textFile, Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

Here is the DiaryEntry.java:


import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

import androidx.appcompat.app.AppCompatActivity;

public class DiaryEntry extends AppCompatActivity {
    private ImageButton backToDiary;
    private EditText readText;
    private Button loadDiaryEntry;
    private String textFileToRead;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.diary_entry);
        Intent intent = getIntent();

        //Initialising things
        backToDiary = (ImageButton) findViewById(R.id.back_to_diary);
        readText = (EditText) findViewById(R.id.read_text);
        loadDiaryEntry = (Button) findViewById(R.id.load_diary_entry);
    }



    public void load(View v){

        FileInputStream fis = null;
        try {
            fis = openFileInput(textFileToRead);
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            String text;
            while ((text = br.readLine()) != null) {
                sb.append(text).append("
");
            }
            readText.setText(sb.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


}

And this is the error from the log cat:

java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
        at android.view.View.performClick(View.java:6256)?
        at android.view.View$PerformClick.run(View.java:24701)?
        at android.os.Handler.handleCallback(Handler.java:789)?
        at android.os.Handler.dispatchMessage(Handler.java:98)?
        at android.os.Looper.loop(Looper.java:164)?
        at android.app.ActivityThread.main(ActivityThread.java:6541)?
        at java.lang.reflect.Method.invoke(Native Method)?
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)?
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)?
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.indexOf(int)' on a null object reference
        at android.app.ContextImpl.makeFilename(ContextImpl.java:2420)
        at android.app.ContextImpl.openFileInput(ContextImpl.java:513)
        at android.content.ContextWrapper.openFileInput(ContextWrapper.java:189)
        at android.content.ContextWrapper.openFileInput(ContextWrapper.java:189)
        at com.example.venttome.DiaryEntry.load(DiaryEntry.java:41)
        at java.lang.reflect.Method.invoke(Native Method)?
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)?
        at android.view.View.performClick(View.java:6256)?
        at android.view.View$PerformClick.run(View.java:24701)?
        at android.os.Handler.handleCallback(Handler.java:789)?
        at android.os.Handler.dispatchMessage(Handler.java:98)?
        at android.os.Looper.loop(Looper.java:164)?
        at android.app.ActivityThread.main(ActivityThread.java:6541)?
        at java.lang.reflect.Method.invoke(Native Method)?
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)?
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)?

I would really appreciate any help because I don't know what's wrong and how to fix it. Thanks in advance.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...