Android 无法解析json(离子)
我使用我的图书馆项目 作者举了一个例子:Android 无法解析json(离子),android,android-json,ion,Android,Android Json,Ion,我使用我的图书馆项目 作者举了一个例子: public static class Tweet { public String id; public String text; public String photo; } public void getTweets() throws Exception { Ion.with(context) .load("http://example.com/api/tweets") .as(new TypeTok
public static class Tweet {
public String id;
public String text;
public String photo;
}
public void getTweets() throws Exception {
Ion.with(context)
.load("http://example.com/api/tweets")
.as(new TypeToken<List<Tweet>>(){})
.setCallback(new FutureCallback<List<Tweet>>() {
@Override
public void onCompleted(Exception e, List<Tweet> tweets) {
// chirp chirp
}
});
}
有助于了解问题所在?我在服务器上的回答:
{"name":"Vasya","soname":"Pupkin","age":"25","country":"Russian Federation"}{"name":"Iliya","soname":"Strelnikov","age":"43","country":"Kazahstan"}
可能不是正确的数据格式,库无法理解?库希望从url接收
JsonArray
。确保获得JsonArray
。其次,result.get(0).name
有时会返回null指针
,原因是应该首先检查请求过程中是否发生错误。这可以通过onCompleted
方法中的参数e
找到。然后在发送到toast之前,您需要检查列表
是否包含元素,因为如果0th元素
未找到,则会出现空指针错误
在onCompleted
方法中执行以下类似操作
@Override
public void onCompleted(Exception e, List<Test> result) {
//do stuff with the result or error
String msg;
if(e != null) {
msg = "Error occured";
}else if(result.size()>0){
msg = "Received 0 elements";
}else{
msg = result.get(0).name;
}
Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
}
@覆盖
未完成公共作废(例外e,列表结果){
//对结果或错误进行处理
串味精;
如果(e!=null){
msg=“发生错误”;
}else if(result.size()>0){
msg=“接收到0个元素”;
}否则{
msg=result.get(0).name;
}
Toast.makeText(getActivity(),msg,Toast.LENGTH_LONG).show();
}
您的响应是否已完成,因为它在JSONLINT中显示json格式错误,并且示例没有指定哪一行是作者。所以我无法理解。12-22 06:08:41.218 577-577/com.testlist.pavel.transportercity D/ionmy﹕ 由于示例未指定获取作者的行,因此发生错误。因此,我无法理解。我无法理解您的注释:-/java.lang.IllegalStateException:应为BEGIN_数组,但为BEGIN_对象。我想说的是,我不理解从服务器获得的行的外观。在我的例子中,这个错误表明它需要一个jsonArray,而得到的是jsonObject。确保您的url返回jsonArray。jsonArray的格式应该是[{},{},{}]
{"name":"Vasya","soname":"Pupkin","age":"25","country":"Russian Federation"}{"name":"Iliya","soname":"Strelnikov","age":"43","country":"Kazahstan"}
@Override
public void onCompleted(Exception e, List<Test> result) {
//do stuff with the result or error
String msg;
if(e != null) {
msg = "Error occured";
}else if(result.size()>0){
msg = "Received 0 elements";
}else{
msg = result.get(0).name;
}
Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
}