Android 如何使用Gson将JSON读取为字符串?

Android 如何使用Gson将JSON读取为字符串?,android,string,gson,inputstream,logcat,Android,String,Gson,Inputstream,Logcat,我从WebService获取了一个Json,我想在我的LogCat中将它打印成字符串。我尝试了以下方法: Gson gson = new Gson(); HttpEntity getResponseEntity = httpResponse.getEntity(); InputStream is = getResponseEntity.getContent(); Reader reader = new InputStreamReader(is); Type snsType = new TypeT

我从
WebService
获取了一个Json,我想在我的LogCat中将它打印成
字符串。我尝试了以下方法:

Gson gson = new Gson();
HttpEntity getResponseEntity = httpResponse.getEntity();
InputStream is = getResponseEntity.getContent();
Reader reader = new InputStreamReader(is);
Type snsType = new TypeToken<SNSRegister>(){}.getType();
snsRegister = gson.fromJson(reader, snsType);
String jsonString = convertStreamToString(is);

但是我的字符串总是空的,我不知道为什么
snsRegister
不为空,因此这不是问题所在。

您的流很可能已经被GSON读取过一次

如果你真的,真的想读两遍,你需要
reset()
一个流,但是首先你必须
mark()
你想重置的位置

但是,您只需在logcat中打印JSON,只需将
toString()
方法添加到
SNSRegister
类中,或者添加更好的用户
改进
日志机制。

如果这对您来说非常重要,
Gson
可以使用
字符串。
我不建议将
流读取两次,尽管可以使用
mark()
reset()
执行此操作。由于除了
读取器
之外,
Gson
还将反序列化
字符串
,因此您可以像这样将
字符串
传递到Gson中:

HttpEntity getResponseEntity = httpResponse.getEntity();
InputStream is = getResponseEntity.getContent();
String jsonString = convertStreamToString(is);
Log.i("MyTAG", jsonString);

Gson gson = new Gson();
Type snsType = new TypeToken<SNSRegister>() {}.getType();
snsRegister = gson.fromJson(jsonString, snsType);
        
HttpEntity getResponseEntity=httpResponse.getEntity();
InputStream is=getResponseEntity.getContent();
字符串jsonString=convertStreamToString(is);
Log.i(“MyTAG”,jsonString);
Gson Gson=新的Gson();
类型snsType=newTypeToken(){}.getType();
snsRegister=gson.fromJson(jsonString,snsType);
不过,我不建议在生产环境中这样做,因为转换为
字符串
需要很多额外的工作。但显然,您可以暂时使用它进行调试;你目前的做法是最好的生产方式


另一个选项是使用
gson.toJson()
SNSRegister
对象转换回JSON,但这会更慢。

您从同一输入流中读取了两次。你不能那样做。您可以做的是先读取字符串,然后记录,从JSON调用,字符串为param
。一些实现支持在输入流中标记位置,因此这可能是也可能不是work@JaviSanchezG谢谢你的勾选!你也因此得到了两个声望点!
HttpEntity getResponseEntity = httpResponse.getEntity();
InputStream is = getResponseEntity.getContent();
String jsonString = convertStreamToString(is);
Log.i("MyTAG", jsonString);

Gson gson = new Gson();
Type snsType = new TypeToken<SNSRegister>() {}.getType();
snsRegister = gson.fromJson(jsonString, snsType);