如何编写和调用带有.txt文件内部对象的arraylist

时间:2020-10-04 18:09:24

标签: java android android-studio arraylist

我对使用Java和Android Studio进行编码非常陌生。我正在尝试编写一个应用程序,其中将项目从数组列表添加到名为ToDo的对象的recyclerview中。我正在尝试让该应用在创建活动时从文本文件中读取列表。请帮助我使我的保存和加载方法正常工作。这两个方法在顶部给出,而我的mainactivity类在下面给出:

public void load() {
    FileInputStream fis;
    try {
        fis = new FileInputStream(FILE_NAME);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    ToDo object1;
    try {
        fis = openFileInput(FILE_NAME);
        ObjectInputStream ois = new ObjectInputStream(fis);
        if (fis == null) {
         File newFile = new File(Environment.getExternalStorageDirectory(), FILE_NAME);
        }
        while ((object1 = (ToDo) ois.readObject()) != null) {
            myExampleList.add((ToDo) ois.readObject());
        }
        ois.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

public void save() {
    FileOutputStream fis;
    try {
        fis = new FileOutputStream(FILE_NAME);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    try {
        fis = getBaseContext().openFileOutput(FILE_NAME, MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fis);
        oos.writeObject(myExampleList);
        oos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

package com.example.testapplication3;


import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Environment;
import android.preference.EditTextPreference;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ArrayList<ToDo> myExampleList;
    private RecyclerView mRecyclerView;
    private RecyclerAdapterClass mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    private RelativeLayout layout1;
    private ViewGroup viewItemScreen;
    private ImageView viewItemScreenClose;
    private CardView addItemScreen;
    private ImageView viewItemScreenEdit;
    private EditText viewItemEditItemTitle;
    private EditText viewItemEditItemContent;
    private Button saveChangesButton;
    private Button completeTask;
    private static final String FILE_NAME = "tododata.txt";



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        layout1 = findViewById(R.id.linearLayout1);
        layout1.setVisibility(View.VISIBLE);
        ImageButton addItemButton = findViewById(R.id.imageButton);
        final EditText contentText = findViewById(R.id.editTextMainContent);
        final EditText titleText = findViewById(R.id.editTextTextPersonName);
        Button buttonAddItem = findViewById(R.id.buttonAddItem);
        addItemScreen = findViewById(R.id.addItemScreenView);
        addItemScreen.setVisibility(View.INVISIBLE);
        viewItemScreen = findViewById(R.id.viewIyemScreen);
        viewItemScreen.setVisibility(View.INVISIBLE);
        viewItemScreenClose = findViewById(R.id.imageViewClose);
        viewItemScreenEdit = findViewById(R.id.viewItemEditImage);
        viewItemEditItemTitle = findViewById(R.id.viewItemEditItemTitle);
        viewItemEditItemContent = findViewById(R.id.viewItemEditItemContent);
        saveChangesButton = findViewById(R.id.buttonSaveViewItemChanges);
        saveChangesButton.setVisibility(View.INVISIBLE);
        completeTask = findViewById(R.id.buttonCompleteTask);

        myExampleList = new ArrayList<>();
        createRecyclerView();

        addItemButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                layout1.setVisibility(View.INVISIBLE);
                addItemScreen.setVisibility(View.VISIBLE);
            }
        });

        buttonAddItem.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String tempTitle = titleText.getText().toString();
                    String tempContent = contentText.getText().toString();
                    myExampleList.add(new ToDo(tempTitle, tempContent));
                    addItemScreen.setVisibility(View.INVISIBLE);
                    layout1.setVisibility(View.VISIBLE);
                    save();
                    createRecyclerView();
                }
        });
    }

    private void createRecyclerView(){
        load();
        mRecyclerView = findViewById(R.id.recyclerView1);
        //mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new RecyclerAdapterClass(myExampleList);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);

        mAdapter.setOnItemClickListener(new RecyclerAdapterClass.OnItemClickListener() {
            @Override
            public void OnItemClick(int position) {
                ToDo toDoIndexPos = myExampleList.get(position);
                launchViewItemScreen(toDoIndexPos);
                mAdapter.notifyItemChanged(position);
            }
        });
    }

    private void removeItemFromToDoList(int position){
        myExampleList.remove(position);
        //notify() may cause errors
        myExampleList.notify();
        //applyChanges();
        save();
    }


    private void launchViewItemScreen(final ToDo itemToView){
        layout1.setVisibility(View.INVISIBLE);
        viewItemScreen.setVisibility(View.VISIBLE);
        final TextView textViewTitle = findViewById(R.id.viewItemViewTitle);
        final TextView textViewContent = findViewById(R.id.viewItemViewContent);
        textViewTitle.setText(itemToView.getToDoTitle());
        textViewContent.setText(itemToView.getToDoContent());

        viewItemScreenClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewItemScreen.setVisibility(View.INVISIBLE);
                layout1.setVisibility(View.VISIBLE);
            }
        });

        viewItemScreenEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textViewTitle.setVisibility(View.INVISIBLE);
                textViewContent.setVisibility(View.INVISIBLE);
                saveChangesButton.setVisibility(View.VISIBLE);
                viewItemEditItemTitle.setVisibility(View.VISIBLE);
                viewItemEditItemContent.setVisibility(View.VISIBLE);
                viewItemEditItemTitle.setText(itemToView.getToDoTitle());
                viewItemEditItemContent.setText(itemToView.getToDoContent());
            }
        });

        saveChangesButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                itemToView.setToDoTitle(viewItemEditItemTitle.getText().toString());
                itemToView.setToDoContent(viewItemEditItemContent.getText().toString());
                textViewTitle.setText(itemToView.getToDoTitle());
                textViewContent.setText(itemToView.getToDoContent());
                saveChangesButton.setVisibility(View.INVISIBLE);
                viewItemEditItemTitle.setVisibility(View.INVISIBLE);
                viewItemEditItemContent.setVisibility(View.INVISIBLE);
                textViewTitle.setVisibility(View.VISIBLE);
                textViewContent.setVisibility(View.VISIBLE);
                save();
            }
        });

        completeTask.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myExampleList.remove(itemToView);
                viewItemScreen.setVisibility(View.INVISIBLE);
                layout1.setVisibility(View.VISIBLE);
                createRecyclerView();
                save();
            }
        });
    }
    public void load() {
        FileInputStream fis;
        try {
            fis = new FileInputStream(FILE_NAME);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        ToDo object1;
        try {
            fis = openFileInput(FILE_NAME);
            ObjectInputStream ois = new ObjectInputStream(fis);
            if (fis == null) {
             File newFile = new File(Environment.getExternalStorageDirectory(), FILE_NAME);
            }
            while ((object1 = (ToDo) ois.readObject()) != null) {
                myExampleList.add((ToDo) ois.readObject());
            }
            ois.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public void save() {
        FileOutputStream fis;
        try {
            fis = new FileOutputStream(FILE_NAME);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            fis = getBaseContext().openFileOutput(FILE_NAME, MODE_PRIVATE);
            ObjectOutputStream oos = new ObjectOutputStream(fis);
            oos.writeObject(myExampleList);
            oos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

0 个答案:

没有答案