Articles of 序列化

什么是保存ArrayList内容的最佳方法?

我想保存一个ArrayList,以便它是持久的。 内容可以改变。 什么是在android中接近这个最好的方法?

Android和协议缓冲区

我正在编写一个Android应用程序,既可以存储数据,也可以使用协议缓冲区与服务器进行通信。 但是,使用LITE标志(在JAR库和生成的.java文件中)编译的协议缓冲区的库存实现的开销为〜30 KB,程序本身只有〜30 KB。 换句话说,协议缓冲区加倍了程序的大小。 在线search,我find了一个Android特定实现的参考 。 不幸的是,似乎没有任何文档,标准.proto文件生成的代码与它不兼容。 有没有人用过它? 如何从.proto文件为此实现生成代码? 有没有其他轻量级的select?

ClassCastException在onRestoreInstanceState中发生

ClassCastException随机发生,以恢复onRestoreInstanceState()中的Vector。 通常恢复vector完成,但有时发生exception。 我认为这种情况发生在活动进入背景并被摧毁时,但我不确定。 有任何想法吗? 谢谢。 Stack<LocationInfo> mLocationInfoVector; @Override protected void onSaveInstanceState(Bundle outState) { outState.putSerializable("locationInfos", mLocationInfoVector); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { if (savedInstanceState.getSerializable("locationInfos") != null) { @SuppressWarnings("unchecked") mLocationInfoVector= (Stack<LocationInfo>) savedInstanceState.getSerializable("locationInfos"); } super.onRestoreInstanceState(savedInstanceState); } 添加: 我忘了附上exception日志。 那是 java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Stack

自定义序列化程序 – 使用GSON的反序列化程序列表BasicNameValuePairs

我试图为BasicNameValuePair对象的一些列表实现一个自定义的gson序列化器/反序列化器。 我在这里看到了部分解决scheme代码(用于序列化): 如何让Gson序列化一个基本名称值对列表? 但是我想实现反序列化 ,我尝试了一下机会,代码在这里: package dto; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.http.message.BasicNameValuePair; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; public class KeyValuePairSerializer extends TypeAdapter<List<BasicNameValuePair>> { @Override public void write(JsonWriter out, List<BasicNameValuePair> data) throws IOException { out.beginObject(); for(int i=0; i<data.size();i++){ out.name(data.get(i).getName()); out.value(data.get(i).getValue()); } out.endObject(); } @Override public List<BasicNameValuePair> read(JsonReader in) throws IOException { ArrayList<BasicNameValuePair> […]

如何使用自定义对象作为参数创build一个Volley JSONObject请求?

我试图使用Volley库的一个JSONObject POST请求到一个服务器,该服务器需要2个参数,一个对象(地址)和一个不同的对象(租户)列表。 当我尝试发出请求时,第一个参数(地址)在发送之前由Volley进行格式化,并且请求不被服务器接受。 我的请求看起来像这样: JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, SERVER_URL, postPropertyJSONObject, responseListener, errorListener) 我的postPropertyJSONObject是这样创build的: JSONObject obj = new JSONObject(); obj.put("Address", convertAddressToJson(property.getAddress()).toString()); obj.put("Tenants", prop.getTenantList()); convertAddressToJson()方法如下所示: JSONObject jsonObject= new JSONObject(); jsonObject.put("Building", address.getBuilding()); jsonObject.put("Street", address.getStreet()); jsonObject.put("Town", address.getTown()); jsonObject.put("ZipCode", address.getZipCode()); jsonObject.put("County", address.getCounty()); jsonObject.put("Country", address.getCountry()); 我尝试只传递的地址对象,但这是没有序列化,所以也没有工作。 我也尝试在请求中使用的JSONObject的“地址”字段中传递Address.toString(),但是这也不起作用。 我的Property对象的getAddress()方法返回一个Address对象,如下所示: public class Address { private String Street; private String Building; private String […]

android如何保存一个位图 – 马车代码

我试图序列化一个类,至less我有一个位图variables。 这是有点工作的代码….我需要帮助,以找出什么是错误的….. private Bitmap myVideoScreenshotBm; private void writeObject(ObjectOutputStream out) throws IOException{ out.writeInt(myVideoScreenshotBm.getRowBytes()); out.writeInt(myVideoScreenshotBm.getHeight()); out.writeInt(myVideoScreenshotBm.getWidth()); int bmSize = myVideoScreenshotBm.getHeight() * myVideoScreenshotBm.getRowBytes(); ByteBuffer dst= ByteBuffer.allocate(bmSize); myVideoScreenshotBm.copyPixelsToBuffer(dst); byte[] bytesar=new byte[bmSize]; dst.position(0); dst.get(bytesar); out.write(bytesar); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{ int nbRowBytes=in.readInt(); int height=in.readInt(); int width=in.readInt(); // int bmSize = nbRowBytes * height; byte[] toread= new byte[bmSize]; […]

如何在android中将gson序列化的对象传递给Intent?

我想通过使用下面的代码将gson序列化对象传递给intent intent.putExtra("com.example", vo); // vo is the gson serialised object. 但它是抛出运行时exception,请帮助。 java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.da) at android.os.Parcel.writeSerializable(Parcel.java:1285) at android.os.Parcel.writeValue(Parcel.java:1233) at android.os.Parcel.writeMapInternal(Parcel.java:591) at android.os.Bundle.writeToParcel(Bundle.java:1646) at android.os.Parcel.writeBundle(Parcel.java:605) at android.content.Intent.writeToParcel(Intent.java:6831) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1927) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419) at android.app.Activity.startActivityForResult(Activity.java:3390) at android.app.Activity.startActivityForResult(Activity.java:3351) at android.app.Activity.startActivity(Activity.java:3587) at android.app.Activity.startActivity(Activity.java:3555)

Android领域 – 使用意图传递领域对象

我想从一个活动传递领域对象到另一个。 例如 Intent intent = new Intent(MainActivity.this, Second.class); intent.putExtra("Student", studentObj); // studentObj is a realm object startActivity(intent); 并从第二个活动接收它 Intent i = getIntent(); student = (Student) i.getSerializableExtra("Student"); 但是这会导致空指针exception。 java.lang.RuntimeException: Unable to start activity ComponentInfo{testapp.com.tms/tms.testapp.com.tms.view.SecondActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'io.realm.internal.LinkView io.realm.internal.Row.getLinkList(long)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) at […]

在Android上从bundle中检索数据时发生ClassCastException

我有一些状态,我想保存一个片段的生命周期。 它在屏幕旋转时工作正常,但当进程已经被杀死并从磁盘恢复(我认为这是如何工作),我得到一个ClassCastException。 这是一些代码: 初始化: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { playlistsMap = new LinkedHashMap<Section, List<Playlist>>(); } else { playlistsMap = (LinkedHashMap<Section, List<Playlist>>) savedInstanceState.getSerializable(PLAYLISTS_MAP_KEY); } setHasOptionsMenu(true); } 保存数据: @Override public void onSaveInstanceState(Bundle outState) { if (isEverySectionsLoaded()) { outState.putSerializable(PLAYLISTS_MAP_KEY, playlistsMap); } else { outState.putSerializable(PLAYLISTS_MAP_KEY, new LinkedHashMap<Section, List<Playlist>>()); } // … } 我在onCreate投下的exception: […]

在Android上保存数据的build议?

有一个Web服务提供了我的应用程序使用的一些数据。 这个数据是相当大的,只是非常less有变化,所以我认为这将是很好的,如果应用程序可以caching在SD卡上,只有根据需要进行更新。 目前,我正在抓取数据(一个XML文件)并使用SAX将其parsing到对象树中。 这个过程需要(最多)2-3秒在我的WIFI。 但是,将结果对象序列化到SDCard需要更长的时间(一分钟或更长时间),反序列化仍然比首先下载/parsing需要更长的时间。 有没有人有任何改善这个build议或替代想法坚持这个数据(除了只保存XML文件,每次重新parsing)? 更新:这不仅仅是一个简单的logging集合。 对象图实际上非常复杂,将其存储到数据库中会导致数十个表中每个表中只有一条logging。