2013-11-23 2 views
0

Я пытаюсь получить данные с URL-адреса JSON. Конечно, AsyncTask. Но проблема в том, что в файле JSON нет объекта. Это массив. JSON URL и api websiteКак получить данные в массиве из URL

Может кто-нибудь сказать мне, как создать JSONArray и JSONObject для этого файла JSON ?!

Вот что я сделал, что делает приложение перестанет работать

//URL to get JSON Array 
private static String url = "http://api.worldbank.org/countries/ir?format=json"; 

//JSON Node Names 
private static final String TAG_OBJ = "user"; 
private static final String NAME = "name"; 
private static final String CAPITALCITY = "capitalCity"; 
    . 
    . 
    . 
    class GetJSONTask extends AsyncTask<String, Void, JSONObject> { 


    protected JSONObject doInBackground(String... urls) { 
     // Creating new JSON Parser 
     JSONParser jParser = new JSONParser(); 

     // Getting JSON from URL 
     JSONObject json = JSONParser.getJson(url); 

     return json; 
    } 
    protected void onPostExecute(JSONObject json) { 
     //Getting JSON Array 
     try { 
      user = json.getJSONArray(TAG_OBJ); 
      JSONObject c = user.getJSONObject(0); 

      //Stroing JSON item in a Variable 
      String name = c.getString(NAME); 
      String capitalCity = c.getString(CAPITALCITY); 

      //Importing TextView 
      final TextView view1 = (TextView)findViewById(R.id.name); 
      final TextView view2 = (TextView)findViewById(R.id.capitalCity); 

      //Set JSON Data in TextView 
      view1.setText(name); 
      view2.setText(capitalCity); 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

ответ

0
if(i<jArray.length()) { 
     JSONObject json_obj = jArray.getJSONObject(i); //get array object 
     name = json_obj.getString("your tag name");  fetch item here 
    } 
+0

Спасибо за ур пост. Можете ли вы сделать это полностью? Я хочу сказать, куда я должен добавить? Должен ли я удалить какую-либо деталь и заменить ее? и что такое jArray? – user2977338

0

Использование JSON массива. Вот мой код: -

String url = "http://api.androidhive.info/contacts/"; 
    JSONParser jParser = new JSONParser(); 

    // Getting JSON from URL 
    JSONObject json = jParser.getJSONFromUrl(url); 
    try { 
     // Getting JSON Array 
     JSONArray begin = json.getJSONArray("contacts"); 
     JSONObject c = begin.getJSONObject(0); 

     // Storing JSON item in a Variable 
     String id = c.getString("id"); 
     String name = c.getString("name"); 
     String size = c.getString("email"); 

Поместите это в Асинхронный

+0

Спасибо за сообщение. Это не работает. Но вопросы. Почему я должен использовать контакты? У меня нет «контактов» в моем массиве. – user2977338

+0

Чувак, который является моим примером,.,. Я просто использовал другой JSON, чтобы объяснить это вам. НЕ копируйте и вставляйте вслепую. Поймите comcept –

+0

Вот что мне было интересно. Если вы сравните свой пример с моим, все будет точно таким же. Я прав? – user2977338

0

Изменить свой MainActivity.java, как показано ниже,

public class MainActivity extends Activity { 

// URL to get JSON Array 
private static String url = "http://api.worldbank.org/countries/ir?format=json"; 

// JSON Node Names 
private static final String TAG_NAME = "name"; 
private static final String TAG_CAP_City = "capitalCity"; 
JSONArray responseArray = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    new GetJSONTask().execute(); 



} 
class GetJSONTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... arg0) { 
     // Creating new JSON Parser 
     JSONParser jParser = new JSONParser(); 

     // Getting JSON from URL 
     String json = jParser.getJSONFromUrl(url); 
     return json; 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     try { 
      // Getting JSON Array 
      responseArray = new JSONArray(result); 
      JSONArray parsedArray=responseArray.getJSONArray(1); 
      JSONObject c = parsedArray.getJSONObject(0); 

      // Storing JSON item in a Variable 
      String name = c.getString(TAG_NAME); 
      String email = c.getString(TAG_CAP_City); 

      // Importing TextView 
      // final TextView uid = (TextView)findViewById(R.id.uid); 
      final TextView name1 = (TextView) findViewById(R.id.name); 
      final TextView email1 = (TextView) findViewById(R.id.email); 

      // Set JSON Data in TextView 
      // uid.setText(id); 
      name1.setText(name); 
      email1.setText(email); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

}

изменить Также JSONParser.java

public class JSONParser { 

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

    // constructor 
    public JSONParser() { 

    } 

    public String getJSONFromUrl(String url) { 

     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent();   

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

     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()); 
     }*/ 

     // return JSON String 
     return json; 

    } 
} 
+0

Спасибо. Я попробовал, но приложение перестает работать. – user2977338

+0

check my edit on MainActivity.java – SathishKumar

0

Ple Обратите внимание, что я использовал Strict Policy. Вы продолжаете использовать Async Task и помещаете мой код туда. Вот мой код, связанный с вашим требованием.

JsonParser.Java

package com.example.test; 

import android.os.StrictMode; 
import android.util.Log; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 
static JSONArray jArray = null; 
// constructor 
public JSONParser() { 

} 

public JSONArray getJSONFromUrl(String url) { 

    // Making HTTP request 
    try { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

     StrictMode.setThreadPolicy(policy); 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

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

    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 { 
     jArray = new JSONArray(json); 
    // jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON String 
    return jArray; 

} 
} 

MainActivity.java

 package com.example.test; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.view.Menu; 

public class MainActivity extends Activity { 
    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // Making HTTP request 
     String url = "http://api.worldbank.org/countries/ir?format=json"; 
     JSONParser jParser = new JSONParser(); 

     // Getting JSON from URL 
     JSONArray json = jParser.getJSONFromUrl(url); 
     try { 
      JSONArray json2 = json.getJSONArray(1); // Your second Array in your json 

      for(int i=0;i<json2.length();i++){ 

       JSONObject c = json2.getJSONObject(i); 
       // Storing JSON item in a Variable 
       String name = c.optString("name",""); 
       String capitalCity = c.optString("capitalCity",""); 

      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 
+0

Спасибо, но я не мог попробовать его, поскольку в 'JSONArray json2 = json.getJSONArray (1) есть ошибка:' должна быть строка вместо 1 в этой строке. Есть идеи? – user2977338

+0

У вас есть массив на 1-й позиции в вашем json. Эта линия получает это. Этот код работает отлично. Я запускал его, как много раз. Там не должно быть ни одной строки, поскольку она принимает значение int. Проверьте наш json. У вас есть JSON Array в вашем JSON на 1-й позиции. Эта строка доступа к этой части вашего json. Отлаживайте свой код.,., –

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