Hallo, ich bin neu in Android-Entwicklung. Ich versuche eine Liste zu erstellen, die 4 Eingabefelder und ein Foto benötigt.Drawable ist nicht Serialisierung Ausnahme
Die Liste sollte in dem internen Speicher gespeichert werden, aber ich bin immer diese Fehlermeldung:
java.io.notserializableexception android.graphics.drawable.bitmapdrawable;
Person Bean-Klasse verfügt über 4 String-Variablen und eine Drawable. Danke für jede Hilfe.
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 }
Nein ich nenne es nur PersonBean Wenn ich Drawable nicht benutzen kann, dann was soll ich verwenden, ich bin neu – Alex
Sie sollten nicht blindlings davon ausgehen, dass alles auf die Festplatte serialisiert werden kann. Was Sie stattdessen verwenden sollten - wahrscheinlich ein Dateisystem Pfad, wo das Bild zu finden ist. Oder ein Asset-Pfad. Eine Ressourcen-ID wäre gefährlich, da sie in verschiedenen Versionen möglicherweise nicht stabil sind. Eine Server-URL, wo das Bild heruntergeladen werden soll, wäre ebenfalls akzeptabel. –
Sie meinen ich muss etwas mit ByteArray tun, um Bild zu speichern? – Alex