Android JSON解析器
我试图解析位于http://api.pathofexile.com/ladders/Default?offset=0&limit=1的JSON。Android JSON解析器
{
"total": 15000,
"entries": [
{
"online": false,
"rank": 1,
"character": {
"name": "Byrr",
"level": 85,
"class": "Shadow",
"experience": 1397076236
},
"account": {
"name": "Canoobians"
}
}
]
}
我一直在关注的androidhive tutorial在试图修改它以检索“在线”和“等级”的元素。 (最后我想所有大量条目的元素,但我开始只有这两个试着去了解的东西。
public class AndroidJSONParsingActivity extends ListActivity {
// url to make request
private static String url = "http://api.pathofexile.com/ladders/Default?offset=0&limit=2";
// JSON node names
private static final String TAG_ENTRIES = "entries";
private static final String TAG_ONLINE = "online";
private static final String TAG_RANK = "rank";
// entries JSONArray
JSONArray entries = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Hashmap for ListView
ArrayList<HashMap<String, String>> entriesList = new ArrayList<HashMap<String, String>>();
// create JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from url
JSONObject json = jParser.getJSONFromUrl(url);
try {
// Getting Array of entries
entries = json.getJSONArray(TAG_ENTRIES);
// looping through entries
for (int i = 0; i < entries.length(); i++) {
JSONObject ent = entries.getJSONObject(i);
// storing each JSON item in a variable
String online = ent.getString(TAG_ONLINE);
String rank = ent.getString(TAG_RANK);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ONLINE, online);
map.put(TAG_RANK, rank);
// adding HashList to ArrayList
entriesList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
// Updating parsed JSON data into ListView
ListAdapter adapter = new SimpleAdapter(this, entriesList, R.layout.list_item, new String[] { TAG_ONLINE, TAG_RANK }, new int[] { R.id.online, R.id.rank });
setListAdapter(adapter);
我JSONParser()类是作为教程一样。现在,当我运行程序出现错误:
Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject.
我不知道为什么这个错误发生的事情,因为JSON根据JSONLint是有效的,所以应该不会发送任何HTML,正确的有没有?我错过的东西,甚至是完全不同的/更好的方法来提取JSON?任何踢向正确的方向将不胜感激。
编辑:我不能回答自己还因为我是一个新用户,但事实证明,我得到一个在JSONParser()
,我没有看到过NullPointerException
,并且使用HttpGet()
,而不是HttpPost()
解决了我问题。
谢谢。
事实证明,我得到一个在JSONParser()
NullPointerException
,我没有看到过,并使用HttpGet()
,而不是HttpPost()
解决我的问题。
看这句话在JSONParser
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
网站返回这个头
Content-Type: text/html; charset=UTF-8
你必须在BufferedReader中ISO-8859-1改为UTF-8。
谢谢,但androidhive网站使用的是UTF-8,而不是我试图解析的JSON,这是iso-8859-1。改变它确实引起我注意到我之前没有看到的NullPointerException。在JSONParser中将HttpPost更改为HttpGet修复了一切,但我不完全确定它是什么。 – Jophess
我都是学习编写解析器,但已经检查过现有的JSON解析器是否适合这项工作?我最喜欢的一直是GSON,并在我的Android项目中为我服务。这对你来说至少要维护一件事。 – OEP
也许你应该指出你得到的错误? –