如何使用java或Android?</object>将List <object>转换为字节数组

时间:2012-06-20 04:38:18

标签: android list nullpointerexception bytearray

我在Android中开发应用程序。在这个项目我使用一个对象列表,我需要转换字节数组中的列表对象。但是logcat中有一个空指针异常?这是我的指点。

class MyContact
{
    String Name;
    Bitmap Image;
    String Number;

    public MyContact(String cName, String cNumber, Bitmap cImage) {

        Name    = cName;
        Number  = cNumber;
        Image   = cImage;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public Bitmap getImage() {
        return Image;
    }

    public void setImage(Bitmap image) {
        Image = image;
    }

    public String getNumber() {
        return Number;
    }

    public void setNumber(String number) {
        Number = number;
    }
}



List<MyContact> list = new ArrayList<MyContact>();

我使用

为List对象添加了一些值
MyContact contactObj = new MyContact(name, phoneNo, photo);
 list.add(contactObj);

bla bla bla ....

我需要将整个列表对象存储到Android Mobiles本地文件中。我用过,

FileOutputStream fos = openFileOutput( fileName, Context.MODE_PRIVATE);
 fos.write(toByteArray(MyTrackList));   // null pointer error occured here
 fos.close();

这是一个字节数组转换编码。

public static byte[] toByteArray (Object obj)
    {
      byte[] bytes = null;
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      try {
        ObjectOutputStream oos = new ObjectOutputStream(bos); 
        oos.writeObject(obj);
        oos.flush(); 
        oos.close(); 
        bos.close();
        bytes = bos.toByteArray ();
      }
      catch (IOException ex) {
        //TODO: Handle the exception
      }
      return bytes;
    }

但在注释中标记的上面的行中返回空指针异常  我该如何解决这个问题。有什么建议吗?提前谢谢....

2 个答案:

答案 0 :(得分:4)

  catch (IOException ex) {
    //TODO: Handle the exception
  }

有你的问题:如果有IOException,你的方法只会返回null而不会告诉你。

不要捕获异常,将方法更改为throws IOException(因为无论如何你都无法做到这一点),然后找出导致它的原因。

很可能是因为您的MyContact类未实现Serializable,因此无法将其写入ObjectOutputStream。

此外,通过不使用该中间字节数组并将ObjectOutputStream直接连接到FileOutputStream,可以提高性能和内存使用率。

答案 1 :(得分:0)

@Thilo很好地指出了可能存在的问题。你可以发布Logcat输出吗?

[建议:

我通常建议使用JSON / XML序列化,因为Android SDK支持一些非常好的JSON / XML(DOM / SAX / XML pull)实现。

  • 它们使您的本地文件可读,可移植。
  • 您甚至可以通过网络传输文件,也可以远程存储。

希望这有帮助,干杯! ]