2012-01-18 2 views
1

Я использую кодировку из примера из this link: Код, как показано ниже:Как получить данные из массива json и отобразить их в текстовом виде?

public class food extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     String result = null; 
     InputStream is = null; 
     StringBuilder sb=null; 
     String result=null; 
      TextView fdi = (TextView)findViewById(R.id.textView1); 
      TextView fdn = (TextView)findViewById(R.id.textView2); 

     //http post 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://127.0.0.1/food.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection"+e.toString()); 
     } 

     //convert response to string 
     try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      sb = new StringBuilder(); 
      sb.append(reader.readLine() + "\n"); 
      String line="0"; 

      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 

      is.close(); 
      result=sb.toString(); 

     }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     //paring data 
     int fd_id; 
     String fd_name; 
     try{ 
     jArray = new JSONArray(result); 
     JSONObject json_data=null; 

     for(int i=0;i<jArray.length();i++){ 
       json_data = jArray.getJSONObject(i); 
       fd_id=json_data.getInt("FOOD_ID"); 
       fd_name=json_data.getString("FOOD_NAME"); 
     } 

     }catch(JSONException e1){ 
      Toast.makeText(getBaseContext(), "No Food Found", Toast.LENGTH_LONG).show(); 
     }catch (ParseException e1){ 
      e1.printStackTrace(); 
     } 
    } 
} 

Теперь мой вопрос заключается в том, чтобы передать эти данные в виде списка, как для каждой итерации элемента списка должны быть добавлены с извлеченными данными.

Пожалуйста, помогите мне

Спасибо заранее

ответ

3

Вы уже получаете строки в коде ниже, почему бы вам не использовать.

  for(int i=0;i<jArray.length();i++){ 
      json_data = jArray.getJSONObject(i); 
      fd_id=json_data.getInt("FOOD_ID"); 
      fd_name=json_data.getString("FOOD_NAME"); 
      } 

// fdname и fd_id вы получаете это право,

Если код не работает, а затем добавить, что проблема, которую вы столкнулись.

согласно вашему ответа/результата от сервера ниже код работает для меня и дает выход в строке,

   try {  
      String response ="[{\"FOOD_ID\":\"1\",\"FOOD_NAME\":\"Rice\"},{\"FOOD_ID\":\"2\",\"FOOD_NAME\":\"Daal\"}] "; 
      JSONArray array; 

      array = new JSONArray(response); 

      for (int i = 0; i < array.length(); i++) { 
      JSONObject obj = array.getJSONObject(0); 
      String id_fd = obj.getString("FOOD_ID"); 
      String name_fd = obj.getString("FOOD_NAME"); 
      Log.d("JSONArray", id_fd+" " +name_fd); 
     }} catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

, пожалуйста, используйте его в соответствии с вашими потребностями.

+1

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

+0

Да, дайте это, а также распечатайте свой результат, чтобы вы знали, что происходит с сервера, это действительно JsonArray ... – AAnkit

+0

Не могли бы вы проверить его сейчас? –

1

Основная причина ошибки a NullPointerException. Это означает, что вы пытаетесь использовать объект, который имеет значение null. Обычно это происходит потому, что объект еще не инициализирован.

В вашем случае NullPointer вызвано чем-то на линии 29 вашего Food класса, вероятно, один из этих двух линий

TextView fdi = (TextView)findViewById(R.id.textView1); 
    TextView fdn = (TextView)findViewById(R.id.textView2); 

Вы уверены, что оба R.id.textView1 и R.id.textView1 существуют? Они должны быть указаны где-то в файле макета XML, что-то вроде этого:

<TextView 
    android:id="@+id/textView1" 
    .... 
Смежные вопросы