2

http://api.pathofexile.com/ladders/Default?offset=0&limit=1にある JSON を解析しようとしています。

{
"total": 15000,
"entries": [
    {
        "online": false,
        "rank": 1,
        "character": {
            "name": "Byrr",
            "level": 85,
            "class": "Shadow",
            "experience": 1397076236
        },
        "account": {
            "name": "Canoobians"
        }
    }
]
}

「オンライン」要素と「ランク」要素を取得するように変更しようとしている間、私はandroidhiveチュートリアルに従ってきました。(最終的には多数のエントリを持つすべての要素が必要ですが、物事を理解しようとするために、この 2 つだけから始めています。

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を抽出するための完全に異なる/より良い方法はありますか? 正しい方向へのキックは大歓迎です。

編集:私は新しいユーザーなので、まだ自己回答することはできませんが、以前は見たことがなく、問題を解決するのではなく使用NullPointerExceptionしていたことがわかりました。JSONParser()HttpGet()HttpPost()

ありがとう。

4

2 に答える 2

1

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 に変更する必要があります。

于 2013-02-02T21:53:55.587 に答える
1

問題を解決するのではなく、以前は見たことのないものを使用していたことがわかりNullPointerExceptionました。JSONParser()HttpGet()HttpPost()

于 2013-02-03T06:02:05.623 に答える