您好,我是Android开发的新手。 我尝试制作一个包含4个输入字段和一张照片的列表。
列表应保存在内部存储中,但我收到此错误:
java.io.notserializableexception android.graphics.drawable.bitmapdrawable;
Person bean类有4个字符串变量和一个Drawable。 谢谢你的帮助。
package com.example.awais_pc.savedataapp;
import android.app.Dialog; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.Toast;
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView listview;
String fileName = "data.txt";
ArrayList<PersonBean> personBeans ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView)findViewById(R.id.listView);
readDataInFile();
}
public void addRecord(View v ){
myDialog();
}
public void myDialog(){
final ImageButton imgbtn;
final EditText name,pass,email,phone;
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.mydialog);
dialog.setCancelable(false);
name = (EditText)dialog.findViewById(R.id.editTextName);
pass = (EditText)dialog.findViewById(R.id.editTextPassword);
email = (EditText)dialog.findViewById(R.id.editTextEmail);
phone = (EditText)dialog.findViewById(R.id.editTextPhone);
imgbtn = (ImageButton) dialog.findViewById(R.id.imageButton);
Button save = (Button) dialog.findViewById(R.id.buttonSubmit);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nam = name.getText().toString();
String pas = pass.getText().toString();
String em = email.getText().toString();
String ph = phone.getText().toString();
Drawable dra = imgbtn.getDrawable();
personBeans.add(new PersonBean(nam,pas,em,ph,dra));
listview.setAdapter(new Mycustomlist(personBeans, MainActivity.this));
dialog.dismiss();
}
});
dialog.show();
}
private void writeDataInFile(){
try {
FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(personBeans);
oos.flush();
oos.close();
fos.close();
} catch (Exception e) {
Toast.makeText(MainActivity.this, ""+e, Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
listview.setAdapter(new Mycustomlist(personBeans, MainActivity.this));
} // Write File
private void readDataInFile(){
try {
FileInputStream fis = openFileInput(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
personBeans = (ArrayList<PersonBean>)ois.readObject();
} catch (Exception e) {
personBeans = new ArrayList<PersonBean>();
Toast.makeText(MainActivity.this, ""+e, Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
listview.setAdapter(new Mycustomlist(personBeans, MainActivity.this));
}//Read File }
答案 0 :(得分:0)
Android中没有使用第一个off-beans。也许你只是将它命名为因为你已经习惯了这样做,但如果你真的想在Android中尝试做豆子,我建议你开始完全放弃这个概念。
其次,drawables不可序列化。如果您尝试通过可序列化界面将对象序列化为文件,则无法在其中包含Drawable,或者您必须编写自定义序列化函数。