drawable不是可序列化的异常

时间:2016-09-12 17:44:03

标签: 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 }

1 个答案:

答案 0 :(得分:0)

Android中没有使用第一个off-beans。也许你只是将​​它命名为因为你已经习惯了这样做,但如果你真的想在Android中尝试做豆子,我建议你开始完全放弃这个概念。

其次,drawables不可序列化。如果您尝试通过可序列化界面将对象序列化为文件,则无法在其中包含Drawable,或者您必须编写自定义序列化函数。