java - drawable 不是可序列化的异常

标签 java android drawable

您好,我是 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 }

最佳答案

首先,Android 中不使用 beans。也许您之所以这样命名是因为您已经习惯了这样做,但如果您实际上是在尝试在 Android 中执行 bean,我建议您开始完全从思想上摆脱这个概念。

其次,可绘制对象不可序列化。如果您尝试通过可序列化接口(interface)将对象序列化为文件,则该对象中不能包含 Drawable,否则您将不得不编写自定义的序列化函数。

关于java - drawable 不是可序列化的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455872/

相关文章:

android - 如何设置android :textColor using drawable in Android?

java - ServletContext.getRealPath() 在 Tomcat 7 上返回 null

android - 无法向上滚动

android - 在 Phonegap 中为推送通知添加新图标

Android - ClipDrawable、ScaleDrawable,它是如何工作的?

android xml可绘制参数

java - 有比 Swing 更好的 Java 应用程序框架吗?

Java:异常处理 - 我的 catch() 有问题

java - 当从 @Transactional 方法(Spring boot)返回对象时,为什么 Hibernate 没有完全解析我的对象?

java - 从 Firebase 数据库填充 ListView