0

オンラインのチュートリアルに従った後、Android アプリケーション用に Twitter からデータを取得することができました。次のコードは機能します。基本的には、Diablo 3 のキャラクター レベルなどのデータを取得できるアプリケーションを構築したいだけです。どうすればこれを行うことができますか?この URL を使用してデータhttp://us.battle.net/api/d3/profile/Fauntleroy-1134/を取得する必要があると思いますが、うまくいきません。

public class HttpExample extends Activity {

TextView httpStuff;
HttpClient client;
JSONObject json;

final static String URL = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=";

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.httpex);
    httpStuff = (TextView) findViewById(R.id.tvHttp);   
    client = new DefaultHttpClient();
    new Read().execute("created_at");
}

public JSONObject lastTweet(String username) throws ClientProtocolException, IOException, JSONException{
    StringBuilder url = new StringBuilder(URL);
    url.append(username);

    HttpGet get = new HttpGet(url.toString());
    HttpResponse r = client.execute(get);
    int status = r.getStatusLine().getStatusCode();
    if (status == 200){
        HttpEntity e = r.getEntity();
        String data = EntityUtils.toString(e);
        JSONArray timeline = new JSONArray(data);
        JSONObject last = timeline.getJSONObject(0);
        return last;
    }else{
        Toast.makeText(HttpExample.this, "error", Toast.LENGTH_SHORT);
        return null;
    }
}

public class Read extends AsyncTask<String, Integer, String>{

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        try{
            json = lastTweet("");
            return json.getString(params[0]);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        httpStuff.setText(result);
    }

}

}

4

1 に答える 1

0

ここから取得するデータは配列に格納されるため、データを解析すると

JSONArray timeline = new JSONArray(data);

JSON Arrayが取得されます。ここでjson文字列を読むと、文字列が「{」で始まることに気付くでしょう。したがって、ルート
要素は配列ではなくオブジェクトです

JSONObject last = timeline.getJSONObject(0);

解析コードを変更する必要があります。次のようにしてみてください。

// test json string
String data = "{\"heroes\" : [ {\"name\" : \"UUUGUUUUUUUU\",\"id\" : 92352,\"level\" : 60,\"hardcore\" : false,\"paragonLevel\" : 0,\"gender\" : 0,\"dead\" : false,\"class\" : \"demon-hunter\",\"last-updated\" : 1340492305}, {\"name\" : \"RhubarbVole\",\"id\" : 7531555,\"level\" : 50,\"hardcore\" : false,\"paragonLevel\" : 0,\"gender\" : 1,\"dead\" : false,\"class\" : \"monk\",\"last-updated\" : 1339377909}, {\"name\" : \"VoodooFrodo\",\"id\" : 7698952,\"level\" : 32,\"hardcore\" : false,\"paragonLevel\" : 0,\"gender\" : 0,\"dead\" : false,\"class\" : \"witch-doctor\",\"last-updated\" : 1339376344}, {\"name\" : \"CheeseBird\",\"id\" : 13139301,\"level\" : 7,\"hardcore\" : false,\"paragonLevel\" : 0,\"gender\" : 1,\"dead\" : false,\"class\" : \"wizard\",\"last-updated\" : 1338098485} ]}";

root = new JSONObject(data);
JSONArray heroes = root.getJSONArray("heroes");

List<JSONObject> heroesList = new ArrayList<JSONObject>();

for(int i=0;i<heroes.length();i++){
    JSONObject hero = heroes.getJSONObject(i);          
    heroesList.add(hero);                   
}

//...

JSONObject hero = heroesList.get(x);
int level = hero.getInt("level");       
于 2013-03-16T22:08:02.153 に答える