2013-03-16 3 views
0

После того, как я ознакомился с учебным пособием, я смог получить некоторые данные из twitter для моего приложения для Android. Следующий код работает. Я просто хочу создать приложение, которое может извлекать данные, такие как уровень символов Diablo 3. Как мне это сделать? Я думаю, что мне нужно использовать этот URL для извлечения данных http://us.battle.net/api/d3/profile/Fauntleroy-1134/, но мне не повезло.Как получить API для работы?

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); 
    } 

} 

}

+1

чем проблема, извлечение JSON строки или разбора его? – lelloman

+0

В LogCat в Eclipse я получаю несколько тегов System.err, я также вижу всю информацию из URL-адреса, из которого я хочу получить данные. Я решил, что если бы я изменил значение, хранящееся в «окончательном статическом URL String», и изменил строку, которая передается функции read(), приложение по существу продолжит работу. Это будет просто получение различной информации. – user2065502

ответ

0

Данные вашего извлекаются из here хранятся в массиве, так что, когда вы разбираете данные с

JSONArray timeline = new JSONArray(data);

вы получите JSON массив.
Каждый элемент массива является Object, так что вы получите его с

JSONObject last = timeline.getJSONObject(0);

Если вы читаете строку JSon here вы заметите, что строка начинается с «{», поэтому корневой элемент не является массив, но объект.

Вы должны изменить свой код синтаксического анализа, попробовать что-то вроде этого:

// 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");  
+0

Я ценю помощь, я попытался изменить свой код на это, и приложение все еще не делает то, что я ожидаю от него, без сомнения, это будет моя ошибка, поскольку я не так хорош в кодировании. – user2065502

+0

Надеюсь, вы получите это, но если у вас есть сомнения, пожалуйста, не стесняйтесь спрашивать. – lelloman

Смежные вопросы