2016-09-12 7 views
1

Привет, я новичок в разработке 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 } 

ответ

0

Первые бобы не используются в Android. Возможно, вы просто назвали это потому, что привыкли к этому, но если вы на самом деле пытаетесь сделать beans на Android, я предлагаю вам полностью отказаться от этой концепции.

Во-вторых, чертежи не являются сериализуемыми. Если вы пытаетесь сериализовать объект в файл через сериализуемый интерфейс, в нем не может быть Drawable, или вам придется писать настраиваемые функции сериализации.

+0

Нет, я просто назову его PersonBean если я не могу использовать Drawable, то что мне использовать использовать i m new – Alex

+1

Вы не должны просто слепо предположить, что на диск можно будет сериализовать что-либо. Вместо этого вы должны использовать путь файловой системы, где можно найти изображение. Или путь к ресурсу. Идентификатор ресурса был бы опасен, так как они могут быть нестабильными в разных версиях. Также будет приемлемым URL-адрес сервера для загрузки изображения. –

+0

Вы имеете в виду, что я должен что-то делать с ByteArray для хранения изображения? – Alex