Привет, я новичок в разработке Android. Я пытаюсь сделать список, который занимает 4 поля ввода и одну фотографию.drawable не является сериализуемым исключением
Список должен быть сохранен во внутренней памяти, но я получаю эту ошибку:
java.io.notserializableexception android.graphics.drawable.bitmapdrawable;
Person класс боб имеет 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, то что мне использовать использовать i m new – Alex
Вы не должны просто слепо предположить, что на диск можно будет сериализовать что-либо. Вместо этого вы должны использовать путь файловой системы, где можно найти изображение. Или путь к ресурсу. Идентификатор ресурса был бы опасен, так как они могут быть нестабильными в разных версиях. Также будет приемлемым URL-адрес сервера для загрузки изображения. –
Вы имеете в виду, что я должен что-то делать с ByteArray для хранения изображения? – Alex