如何以正确的方式将对象转换为 GSON(JSON)?
How to convert object to GSON(JSON) in the right way?
我在将 bandClient 对象转换为 JSON 时遇到问题(我想保存对象以供以后在 SHARED PREFS (ANDROID) 中使用)。
我尝试使用 GSON 来完成,但在执行过程中
String json = gson.toJson(bandClient);
我总是遇到以下异常:
进程:xxr.com.mitracker,PID:19040
java.lang.WhosebugError
在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
请问如何正确解决?
非常感谢任何建议
方法代码:
private AdapterView.OnItemClickListener onListItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
BandInfo[] pairedBands =
BandClientManager.getInstance().getPairedBands();
Logger.d("Clicked on item " + position);
final BandClient bandClient =
BandClientManager.getInstance().create(context, pairedBands[position]);
//mBandList.get(position).getBandClient();
MsBandHelperAssync asyncTask = new MsBandHelperAssync(new AsyncResponse() {
@Override
public void processFinish(Boolean output) {
try {
Logger.d("RETURNED " + output);
Gson gson = new Gson();
Logger.d("PLAIN OBJECT" + bandClient);
gson.toJsonTree(bandClient);
Logger.d("PASSED");
String json = gson.toJson(bandClient);
Logger.d("PASSED JSON" + json);
//Prefs.putString(Constants.Global.SHARED_PREFS_KEY_PAIRED_DEVICES, json);
Logger.d("Saved");
//CommonHelper.redirectToActivity(context, mActivity, DashboardActivity.class);
} catch (Exception e) {
Logger.e(e.getMessage());
}
}
});
asyncTask.execute(bandClient);
BandClient 表示与 Micrsoft Health 持有的 BandService 的连接。因此,它持有对用于创建它的 activity、服务或应用程序上下文的引用。如果你保存它以备后用,它将不起作用。
因此,您可能希望保存与要保存的 BandClient 关联的 BandInfo 对象的 mac 地址,然后在您要使用它时重新创建 BandClient。
我在将 bandClient 对象转换为 JSON 时遇到问题(我想保存对象以供以后在 SHARED PREFS (ANDROID) 中使用)。
我尝试使用 GSON 来完成,但在执行过程中
String json = gson.toJson(bandClient);
我总是遇到以下异常:
进程:xxr.com.mitracker,PID:19040 java.lang.WhosebugError 在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380) 在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375) 在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380) 在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375) 在 com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
请问如何正确解决?
非常感谢任何建议
方法代码:
private AdapterView.OnItemClickListener onListItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
BandInfo[] pairedBands =
BandClientManager.getInstance().getPairedBands();
Logger.d("Clicked on item " + position);
final BandClient bandClient =
BandClientManager.getInstance().create(context, pairedBands[position]);
//mBandList.get(position).getBandClient();
MsBandHelperAssync asyncTask = new MsBandHelperAssync(new AsyncResponse() {
@Override
public void processFinish(Boolean output) {
try {
Logger.d("RETURNED " + output);
Gson gson = new Gson();
Logger.d("PLAIN OBJECT" + bandClient);
gson.toJsonTree(bandClient);
Logger.d("PASSED");
String json = gson.toJson(bandClient);
Logger.d("PASSED JSON" + json);
//Prefs.putString(Constants.Global.SHARED_PREFS_KEY_PAIRED_DEVICES, json);
Logger.d("Saved");
//CommonHelper.redirectToActivity(context, mActivity, DashboardActivity.class);
} catch (Exception e) {
Logger.e(e.getMessage());
}
}
});
asyncTask.execute(bandClient);
BandClient 表示与 Micrsoft Health 持有的 BandService 的连接。因此,它持有对用于创建它的 activity、服务或应用程序上下文的引用。如果你保存它以备后用,它将不起作用。
因此,您可能希望保存与要保存的 BandClient 关联的 BandInfo 对象的 mac 地址,然后在您要使用它时重新创建 BandClient。