我在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;
}
但在注释中标记的上面的行中返回空指针异常 我该如何解决这个问题。有什么建议吗?提前谢谢....
答案 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)实现。
希望这有帮助,干杯! ]