我决定使用新的数据Json项目。在此之前我使用了XML(库Jsoup)。我找到了一个图书馆ion
有了它,我可以轻松地以String或Json的形式获取数据。
现在的问题。当我继续处理这些数据时?使用XML时,我使用XML中的相同字段创建了一个类bean。然后使用这些类的数组。但我看到有一个android org.json.JSONObject;
我可以直接使用这些对象,还是需要将所有数据放入类中?如果我能做什么是对的?
换句话说,更正此代码?:
Ion.with(getActivity())
.load(my link)
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
// do stuff with the result or error
Toast.makeText(getActivity(), result.getAsJsonObject("person").get("1").toString(), Toast.LENGTH_LONG).show();
name.setText(result.getAsJsonObject("person").getAsJsonObject("1").get("name").toString());
age.setText(result.getAsJsonObject("person").getAsJsonObject("1").get("age").toString());
}
});
编辑:
我发现这个库不是手动从服务器下载数据。据我所知,这个过程分为两个阶段。 1.从服务器获取数据。 2.解析获得的数据。在第一种情况下通常是手动写入数据采集。例如:
private String readString(HttpEntity entity) throws IOException {
// open streams
InputStream in = null;
boolean success = true;
IOException readException = null;
in = entity.getContent();
ByteArrayOutputStream out = new ByteArrayOutputStream();
// progress vars
int total = (int)entity.getContentLength();
int current = 0;
// fetch response
byte[] buff = new byte[1024];
int read;
while ((read = in.read(buff)) != -1) {
out.write(buff, 0, read);
current += read;
if(progressListener != null) progressListener.onProgress(total, current);
}
out.flush();
String result = new String(out.toByteArray(), "UTF-8").trim();
in.close();
out.close();
return result;
}
图书馆简化了这一点。第二阶段 - 解析。但是图书馆已经以Json格式提供了数据。那么,您是否想要做其他事情,或者您可以使用生成的对象来工作?
答案 0 :(得分:0)
Ion.with(context)
.load("http://example.com/thing.json")
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
// do stuff with the result or error
}
});
onCompleted 你有一个JsonObject
想象你的json是这样的(你不知道你的josn怎么样):
{
"menu":{
"id":"file",
"value":"File",
}
}
你可以像这样解析这个json:
String menu = result.getString("menu");
JSONObject jsonMenu = new JSONObject("menu");// get menue as another json object
String id = jsonMenu.getLong("id"); // get a long value from a josn object
Long value = data.getString("value"); // get a string value from josn
它是关于android中的json的一个很好的教程:
Android JSON Parser Tutorial
答案 1 :(得分:0)
用于连接服务器并获取(或发送)json数据: 最好使用最流行的图书馆,如排球图书馆或okhttp v ...(你也可以一起使用它们) 比较这个库看到以下链接: Comparison of Android networking libraries: OkHTTP, Retrofit, and Volley
你可以在:
中阅读有关凌空图书馆的内容http://developer.android.com/training/volley/index.html
http://www.androidhive.info/2014/05/android-working-with-volley-library-1/
(我正在使用凌空,它支持json请求)
在将json对象发送到服务器之前,在从您的案例中作为json对象的服务器获取响应之后,您可能希望使用json对象并将它们转换为您的对象,反之亦然,您可以使用JSON库或Jackson库这个 根据{{3}}:
Jackson是一个用于将对象转换为JSON的Java库,反之亦然。 Gson是解决这个问题的流行选择,但我们发现Jackson更具性能,因为它支持处理JSON的其他方式:流式传输,内存中树模型和传统的JSON-POJO数据绑定。但请记住,Jackson是一个比GSON更大的库,因此根据您的情况,您可能更喜欢GSON以避免65k方法的限制。其他选择:Json-smart和Boon JSON
您可以从以下链接获取JSON库: https://github.com/futurice/android-best-practices
但是如果你想要离子库的繁琐工作说要编辑我的答案;)
抱歉我的英语不好。