我对使用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();
}
}
}