2013-10-04 9 views
0

Как следует разобрать, что JSON http://rutube.ru/api/video/editors/?page=1&format=json? У меня пустой дисплей. Я беру пример с http://www.androidhive.info/2012/01/android-json-parsing-tutorial/JSON разбор пустой дисплей

JSONPARSER.java

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

// constructor 
public JSONParser() { 

} 

public JSONObject getJSONFromUrl(String url) { 

    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     int httpStatus = httpResponse.getStatusLine().getStatusCode(); 
     if (httpStatus != HttpStatus.SC_OK) { 
      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(
         is, "iso-8859-1"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       is.close(); 
       json = sb.toString(); 
      } catch (Exception e) { 
       Log.e("Buffer Error", "Error converting result " + e.toString()); 
      } 

      // try parse the string to a JSON object 
      try { 
       jObj = new JSONObject(json); 
      } catch (JSONException e) { 
       Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      } 

     }  
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return jObj; 
    } 
} 

MAINACTIVITY.java

public class MainActivity extends ListActivity { 
private static String URL_VIDEO = "http"; 
private static final String TAG_RESULTS = "results"; 
private static final String VIDEO_OBJECT = "video"; 
private static final String VIDEO_ID = "id"; 
private static final String VIDEO_TITLE = "title"; 
private static final String VIDEO_CREATED_TS = "created_ts"; 

JSONArray results = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ArrayList<HashMap<String, String>> resultList = new ArrayList<HashMap<String,String>>(); 
    JSONParser jParser = new JSONParser(); 
    JSONObject json = jParser.getJSONFromUrl(URL_VIDEO); 
     try {    
      results = json.getJSONArray(TAG_RESULTS); 
     for (int i = 0; i < results.length(); i++) { 
      JSONObject c = results.getJSONObject(i); 
      JSONObject video = c.getJSONObject(VIDEO_OBJECT); 
      String id = video.getString(VIDEO_ID); 
      String title = video.getString(VIDEO_TITLE); 
      String created_ts = video.getString(VIDEO_CREATED_TS); 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put(VIDEO_ID, id); 
      map.put(VIDEO_TITLE, title); 
      map.put(VIDEO_CREATED_TS, created_ts);    
      resultList.add(map); 
     } 
    } catch(JSONException e) { 
     e.printStackTrace(); 
    } 
     ListAdapter adapter = new SimpleAdapter(this, resultList, 
       R.layout.list_video_item, 
       new String[] { VIDEO_OBJECT, VIDEO_TITLE, VIDEO_CREATED_TS }, new int[] { R.id.object, R.id.title, R.id.created_ts }); 
     setListAdapter(adapter); 
     ListView lv = getListView(); 
    } 
} 
+1

точный дубликат [Parsing JSON android, нужна помощь] (http://stackoverflow.com/questions/19154777/parsing-json-android-help-need) – Axarydax

+0

удалять сообщение из первоиста. – user1784961

ответ

0

Это Prolly потому что URL_VIDEO вы передаете в качестве аргумента содержит только http.

0

Возможно, что-то не удалось во время связи с сервером, перед чтением содержимого вы должны проверить код ответа на сервер. Добавьте этот код после того, как ваш httpClient.execute(httpPost);

int httpStatus = httpResponse.getStatusLine().getStatusCode(); 
switch(httpStatus) 
{ 
    case HttpStatus.SC_OK: 
    { 
    HttpEntity httpEntity = httpResponse.getEntity(); 
    is = httpEntity.getContent(); 
    // Continue with reading the content here 
    } 
    default: 
    { 
    // here you can print errormessages or information what happened 
    } 
} 

Полный код для вашего класса может быть:

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

// constructor 
public JSONParser() { 

} 

public JSONObject getJSONFromUrl(String url) { 

    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     int httpStatus = httpResponse.getStatusLine().getStatusCode(); 
     switch(httpStatus) 
     { 
      case HttpStatus.SC_OK: 
      { 
      try { 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(
         is, "iso-8859-1"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       is.close(); 
       json = sb.toString(); 
      } catch (Exception e) { 
       Log.e("Buffer Error", "Error converting result " + e.toString()); 
      } 

      // try parse the string to a JSON object 
      try { 
       jObj = new JSONObject(json); 
      } catch (JSONException e) { 
       Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      } 
      }  
      break; 
     } 
     default: 
     { 
      Log.e("JSON Parser", "HttpStatus: "+httpResponse.getStatusLine().getStatusCode() + ", message: " + httpResponse.getStatusLine().getReasonPhrase() ); 
      jObj = null; 
     } 
     } 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return jObj; 
    } 
} 

Это должно помочь вам увидеть, что сервер отвечает, надеюсь Ждут t forget a { in the code ;) The 'default' of the switch is your error section, for every server response except 200 OK` вас получит запись в журнале с ответом сервера.

Если вам нужно больше случаев (например, это вы как различные сообщения для 403 Forbidden Юст добавить case HttpStatus.SC_XXXXX блоки Проверка вики, если вам нужно больше информации о Http Statuscodes

+0

Пожалуйста, вы можете показать мне полный код! Thaks – user1784961

+0

У меня alreay выложили полный код класса JSonParser, что вам нужно? У вас есть код основной деятельности? – Radon8472

+0

Мне больше не нужен, я сделал это сам! – user1784961

1

Использование gson library от Google его очень просто:.

String json = getJSONFromUrl(URL);// get json from internet as usual 
Gson gson = new Gson(); 
Data data = gson.fromJson(json, Data.class); // let gson handle all the parsing and create Java objects 

Где Data класс here сгенерирован с использованием this. Я никогда не делал ручной разбор Json, как вы, doin г.

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