1
你好我是android开发新手。 我尝试制作一个需要4个输入字段和一张照片的列表。drawable是不可序列化的异常
名单应保存在内部存储,但我得到这个错误:
java.io.notserializableexception android.graphics.drawable.bitmapdrawable;
人bean类有4个字符串变量和一个可绘制。 感谢您的帮助。
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 }
不,我只是把它命名PersonBean 如果我不能使用Drawable那么我应该用什么来使用我新的 – Alex
你不应该盲目地认为任何东西都可以被序列化到磁盘。你应该使用什么 - 可能是在哪里找到图像的文件系统路径。或资产路径。资源ID会很危险,因为它们在版本中可能不稳定。下载图像的服务器URL也是可以接受的。 –
你的意思是我必须用ByteArray来存储图像吗? – Alex