Articles of gson

从Gson字符串创建对象不起作用

我想将一个对象传递给一个包。 现在我使用GSON转换为Json对象。 bundle被传递,bundle有正确的字符串表示但是当我从字符串创建对象时,我得到一个巨大的错误。 FATAL EXCEPTION: main java.lang.RuntimeException: Failed to invoke private android.net.Uri() with no args at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:107) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172) at com.google.gson.Gson.fromJson(Gson.java:803) at com.google.gson.Gson.fromJson(Gson.java:768) at com.google.gson.Gson.fromJson(Gson.java:717) at com.google.gson.Gson.fromJson(Gson.java:689) at com.test.fragment.QFragment.onCreateView(QFragment.java:54) at android.app.Fragment.performCreateView(Fragment.java:1788) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:899) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1101) at android.app.BackStackRecord.run(BackStackRecord.java:688) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1559) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:445) […]

使用Base64将Android Image上载/下载到JSON会导致内存不足错误

我目前编码和解码图像到Base64。 我通过使用流将图像编码为字符串来克服OOM的初始问题。 我现在的问题是,我无法理解如何通过Gson将多个分辨率图像(5620 x 3747 – 4.92MB或3264 x 1836 – 1.35MB)的多个Base64编码字符串添加到JSON对象。 目前Gson仅使用来自5312 x 2988 – 4.95 MB图像的2个Base64字符串抛出OOMexception。 我知道android可能只能为每个应用程序节省16 / 20Mb,因此这种转换必须超过限制。 如何将流中的Base64字符串写入JSON对象,该对象将包含发布到我的服务器所需的特定值? 是否更容易更改我的服务器以接受多部件请求而不是基于JSON的POJO与多个Base64字符串? 我目前使用的是Volley,并没有官方的多部分请求以及IO流。 如果是压缩问题,在编码到Base64字符串之前,我应该对图像应用多少压缩? 理想情况下,我希望失去任何质量但具有最佳压缩级别。 更多信息 我正在上传多个不同的分辨率图像,因为它是兼容性的测试。 例如,我发送的所有图像都是在低分辨率和极高分辨率的设备上拍摄的,因为我的应用依赖于这些图像的function。 我试图certificate我的应用程序可以处理任何图像(在某种程度上,主要是在移动设备上捕获的图像)。 我知道有些图像可能太大,以至于将它们加载到内存中会导致exception。 这是我稍后会尝试处理的。 在某些情况下,将上传的图像可以从1到200。 我正在努力寻找能够很好地扩展的最佳解决方案。

使用SugarORM和GSON解析字符串ID

我正在使用GSON从json响应创建SugarRecord对象。 我正在使用的API返回一个名为“id”的字段,但“id”的types是一个字符串,而不是long(后端使用mongo)。 以下是我正在使用的代码: Gson gson = new Gson(); // Or use new GsonBuilder().create(); NutritionPlan target = gson.fromJson(jsonObject.getJSONObject(“nutrition_day”).toString(), NutritionPlan.class); 以下是我的json回复: { “nutrition_day”: { “id”: “5342b4163865660012ab0000”, “start_on”: “2014-04-08”, “protein_target”: 157, “sodium_limit”: 2000 } 有没有办法处理这种情况? 我试过了 @Ignore long id; 和 @SerializedName(“id”) String nutrition_plan_id; 在我的模型中,但没有帮助。 任何熟悉Sugar ORM的人 ,知道如何处理不长的id字段?

通过’强制停止’或任务管理器杀死应用程序后,共享首选项byte 值被清除

问题 我在共享首选项中保存了一个byte[] 。 我可以关闭应用程序并使用共享首选项中持久保存的值重新打开它。 运行应用程序并通过“任务管理器”或“强制关闭”关闭它时,将清除byte[]的共享首选项值。 我不明白这一点,因为其他价值观仍然存在。 这让我相信这是由于某些gson或共享首选项问题与byte[]所以我将其转换为String并且我仍然有问题。 编辑: 我在正常活动使用期间保存数据…例如在onCreate()之后。 它不是在onPuse()或onDestroy()我忘了提到这一点。 如果我在这里调用它并且在“强制关闭”场景中没有调用其中一个或两个,那将是有意义的。 共享偏好码 稍加修改以删除应用程序特定的实现和数据 private static final String SHARED_PREFERENCES_FILE_NAME = “SharedPreferenceName”; public static void setSharedPreferenceObjectBase64Encoded(Context context, String key, Object object) throws Exception { // Need an editor to update shared preference values SharedPreferences.Editor editor = context.getSharedPreferences(SHARED_PREFERENCES_FILE_NAME, Context.MODE_PRIVATE).edit(); Gson gson = new GsonBuilder().serializeNulls().setDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSSZ”).create(); String encodedKey = Base64.encodeToString(key.getBytes(), […]

尝试在json中解析日期/时间时com.google.gson.JsonSyntaxException

我正在使用RestTemplete从rest api获取json数据,而我正在使用Gson将数据从json格式解析为Object Gson gson = new Gson(); restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new GsonHttpMessageConverter()); restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); List resultList = null; resultList = Arrays.asList(restTemplate.getForObject(urlService, Appel[].class)); 但我用Date得到了这个问题,我该怎么办.. Could not read JSON: 1382828400000; nested exception is com.google.gson.JsonSyntaxException: 1382828400000 我的Pojo包含其他pojos的身体 public class Appel implements Serializable { private Integer numOrdre; private String reference; private String objet; private String organisme; private Double […]

使用GSON调整改造响应

我希望通过从特定API收到的每个成功响应,以非常方式检索已知JSON对象的子元素。 每个服务器响应都返回以下JSON格式(为简单起见,精简): { “status”: “success”, “error_title”: “”, “error_message”: “”, “data”: { “messages”: [ { “message_id”: “123”, “content”: “This is a message” }, { “message_id”: “124”, “content”: “This is another message” } ] } } 错误响应包含相同的通用格式,“data”对象为空,错误相关的JSON对象包含有用的值。 在出现错误的情况下,我想提取与错误相关的JSON对象。 通过上面的响应,我有一个MessageResponse类,它包含status,errorTitle和errorMessage String属性以及MessageData对象。 然后MessageData对象包含消息List messages – List messages 。 在这种情况下获取消息的我的GET方法如下(为简单起见,简化): @GET(“/chat/conversation”) void getMessages(Callback callback); 如果我坚持使用GSON的串行器提供的默认POJO映射,那么这种设计需要每个响应types有三个类。 我的最终目标是通过仅从成功的服务器响应中读取我需要的内容并忽略其余类来减少所需的类的数量。 我希望我所有的成功,这个API上的回调数据types尽可能接近“数据”内容。 换句话说,我想非常地返回“数据”的子元素。 在上面的例子中,它是一个名为“messages”的数组,但在某些其他响应中,它可能是一个“用户”对象,例如。 我知道这可以通过为每种响应types注册单独的TypeAdapter来完成,但我希望通过使用单个通用解决方案来实现我的最终目标。 […]

在Fragment android中实现AsyncTask

我有一个从列表中输出json数据的活动。 但现在我想在一个片段中实现它。 在这个片段中,我想将其视为gridview。 这两个文件都运行正常。 但是当我尝试实现AsyncTask时,我得到了几个红色标志作为无法访问的代码。 有人可以帮帮我吗? 编辑:新的 public class SalesFragment extends Fragment { GridView gridView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View gv = inflater.inflate(R.layout.hot_sales, null); gridView = (GridView) gv.findViewById(R.id.grid_view); bindGridview(); return gv; } public void bindGridview() { new MyAsyncTask(getActivity(),gridView).execute(“”); } class MyAsyncTask extends AsyncTask { GridView mGridView; Activity mContext; Response […]

GSON忽略错误types的元素

我正在使用Retrofit(与OkHttp和GSON结合使用)与在线Web服务进行通信。 webservice有一个默认的包装器,它的响应类似于: { “resultCode”:”OK”, “resultObj”:”Can be a string or JSON object / array”, “error”:””, “message”:”” } 在此示例中, resultCode将为OK或NO 。 此外,在处理请求时发生错误时, error和message仅包含任何内容。 最后,但并非最不重要的是, resultObj将包含调用的实际结果(在示例中是一个字符串,但有些调用返回JSON数组或JSON对象)。 为了处理这个元数据,我创建了一个generics类,如下所示: public class ApiResult { private String error; private String message; private String resultCode; private T resultObj; // + some getters, setters etcetera } 我还创建了表示有时在resultObj给出的响应的类,并且我已经定义了一个与Retrofit一起使用的接口,看起来有点像这样: public interface SomeWebService { @GET(“/method/string”) ApiResult someCallThatReturnsAString(); […]

GSON:自定义对象反序列化

好的,所以我编辑了这个问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,并且有点过于复杂。 我不希望我的对象结构太重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中我有这个: { “object1”:{ “attribute1” : “test1”, “attribute40” : “test40”, “user”:{ “id”:1, “name”:”foo” } ,”example”:{ “total”:10, “list”:[ { “tag”:”tag1″, “name”:”object name 1″, “pos”:1 }, { “tag”:”tag10″, “name”:”object name 10″, “pos”:10 } ] } } “object2”:{ “attribute1″:”test…” } } 我不想保留我当前的对象结构,一个对象Example ,它包含一个ArrayList和一个int “total”。 但我想只保留一个简单的String,其值为”object name 1;object name 2;…” 。 此外,我想只存储用户ID,而不是完整的用户,因为我已经将完整的用户存储在其他地方,并且还有其他服务器API调用。 所以我的class级类似于: class […]

Gson在发布的apk中反序列化空指针

我正在编写一个Android应用程序需要使用gson反序列化json字符串: { “reply_code”: 001, “userinfo”: { “username”: “002”, “userip”: 003 } } 所以我创建了两个类: public class ReturnData { public String reply_code; public userinfo userinfo; } public class userinfo { public String username; public String userip; } 最后,我在MainActivity.java中的Java代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Context context= MainActivity.this; //Test JSON String JSON=”{\”reply_code\”: 001,\”userinfo\”: {\”username\”: \”002\”,\”userip\”: 003}}”; […]