Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
序列化包含可绘制Android Java的对象_Java_Android_Bitmap_Drawable_Serializable - Fatal编程技术网

序列化包含可绘制Android Java的对象

序列化包含可绘制Android Java的对象,java,android,bitmap,drawable,serializable,Java,Android,Bitmap,Drawable,Serializable,我正在尝试使用此方法将ArrayList(myPlantList)保存到文件中 public static void savePlants(Context c){ try { FileOutputStream fOS = c.openFileOutput("plantArrList", c.MODE_PRIVATE); ObjectOutputStream oOS = new ObjectOutputStream(fOS); oOS.wri

我正在尝试使用此方法将
ArrayList
myPlantList
)保存到文件中

public static void savePlants(Context c){
    try {
        FileOutputStream fOS = c.openFileOutput("plantArrList", c.MODE_PRIVATE);
        ObjectOutputStream oOS = new ObjectOutputStream(fOS);
        oOS.writeObject(myPlantList);
        oOS.close();
        fOS.close();
    } catch (IOException io) {
        io.printStackTrace();
    }
}
我得到一个错误(不会使应用程序崩溃)
java.io.NotSerializableException:android.graphics.drawable.BitmapDrawable
。可以安全地假设它所指的位图可绘制对象是
Plant.image
。如何序列化此
ArrayList
,包括植物图像。我正在阅读有关使用
.compress
方法压缩
BitMapDrawables
的内容,但我不知道如何在将
ArrayList
保存到1个文件的同时对每个
Plant
进行压缩

以下是
工厂
类的相关部分

public class Plant implements Serializable{
    private String name;
    private String date;
    private Drawable image;
    private String waterFrequency;

    public Plant(String n, Drawable i, String wF){
        this.name = n;
        Date time = Calendar.getInstance().getTime();
        this.date = MyApplication.gson.toJson(time);
        this.image = i;
        this.waterFrequency = wF;
    }
}
编辑:可绘制对象是从相机获取的。使用相机拍摄照片,并将其作为可绘制文件存储在
newPlant
活动中(如下所示)


不要序列化
可绘制的
。序列化有关如何获得可绘制的
的信息。当你创建一个
Plant
对象,并调用
Plant
构造函数时,
Drawable
从哪里来?@commonware我编辑了这篇文章,以包含构建工厂的代码。我想这将帮助您了解我在哪里遇到了麻烦。请按住
位图
。将
位图
另存为单独的JPEG文件。让
Plant
保留有关JPEG文件放置位置的信息。谢谢!如果你回答这个问题,我会记下来
public class newPlant extends AppCompatActivity implements OnClickListener {

    private ImageButton plantCam;
    private FloatingActionButton savePlant;
    private EditText newPlantName;
    private EditText newPlantWF;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newplant);
        plantCam = (ImageButton)findViewById(R.id.newPlantImage);
        savePlant = (FloatingActionButton)findViewById(R.id.savePlant);
        newPlantName = findViewById(R.id.newPlantName);
        newPlantWF = findViewById(R.id.newPlantWF);
        plantCam.setOnClickListener(this);
        savePlant.setOnClickListener(this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
            Bitmap bitmap = (Bitmap)data.getExtras().get("data");
        plantCam.setImageBitmap(bitmap);
    }

    public void onClick(View v){
        switch(v.getId()){
            case R.id.newPlantImage:{
                Log.d("plantCam", "clicked");
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent,0);
                break;
            }case R.id.savePlant:{
                Log.d("SavePlant", "clicked");
                Plant temp = new Plant(newPlantName.getText().toString(), plantCam.getDrawable(), newPlantWF.getText().toString());
                Log.d("plantBeingAdded", temp.toString());
                MyApplication.myPlantList.add(temp);
                MyApplication.savePlants(this);
                Log.d("SavePlant", "finished saving plant" + MyApplication.myPlantList.toString() + " end list");
                finish();
                break;
            }
        }
    }
}