当我尝试解析JSON时,我收到一个非常奇怪的错误.实际上,文件非常简单,由一个简单的对象组成如下:
{
"registered":false,
"firstname":"xxx",
"name":"yyyy",
"email":"yyyy.xxx@gmail.com",
"picture":"xxxxx.jpg",
"username":"xxxy"
}
Run Code Online (Sandbox Code Playgroud)
为了解析这个文件,我使用了以下代码,其灵感来自Android SDK的示例:
public static boolean isRegistered(int nmb) {
boolean toReturn = true;
JsonReader reader = null;
try {
reader = new JsonReader(new InputStreamReader(new URL("xxx").openConnection().getInputStream()));
reader.beginObject();
while(reader.hasNext()) {
String name = reader.nextName();
Log.i("Next value", name);
switch (name) {
case "registered":
toReturn = reader.nextBoolean();
break;
case "firstname":
ProfileManager.getInstance().setFirstname(reader.nextString());
break;
case "name":
ProfileManager.getInstance().setName(reader.nextString());
break;
case "email":
break;
case "picture":
break;
case "username":
break;
}
}
reader.endObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return toReturn;
}
Run Code Online (Sandbox Code Playgroud)
当我开始执行时,我在执行时出现错误.
String name = reader.nextName();
Run Code Online (Sandbox Code Playgroud)
错误说它需要一个名字,但它得到一个STRING.可以肯定的是,我用nextString()替换nextName(),我得到了相反的错误:期望一个字符串,但是是NAME.我决定通过peek()方法检查第一个值,它清楚地说第一个元素是NAME.所以我尝试了一个非常简单的事情,手动读取对象,没有循环,它的工作原理.这怎么可能 ?此外,我需要修改什么才能使此代码可用?
谢谢 !
尝试使用android sdk提供的内置库
JSONObject obj = new JSONObject(jsonString);
boolean registered = obj.getBoolean("registered");
String firstname = obj.getString("firstname");
String name = obj.getString("name");
String email = obj.getString("email");
String picture = obj.getString("picture");
String username = obj.getString("username");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |