I have an application that retrieves data from a JSON URL. It works fine with a single URL, but I need to get data from two JSON URLs at the same time. Like some data from one URL, and some from another. And show them in two text files.
Here is my application, it is not loading data at the moment.
MainActivity:
public class MainActivity extends Activity { //URL to get JSON Array private static String url1 = "http://api.worldbank.org/countries/de?format=json"; private static String url2 = "http://api.worldbank.org/countries/it?format=json"; //JSON Node Names private static final String CountryNAME1 = "name"; private static final String CountryNAME2 = "name"; JSONArray user = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new GetJSONTask().execute(url1); //new GETJSONTask().execute(url2); } 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 json1 = jParser.getJSONFromUrl(url1); JSONObject json2 = jParser.getJSONFromUrl(url2); return json1; } protected void onPostExecute(JSONObject json1, JSONObject json2) { //Getting JSON Array try { //For Country 1 // Get the array JSONArray countryArC1 = json1.getJSONArray("myValues"); JSONObject countryObC1 = countryArC1.getJSONObject(0); JSONArray countryAr2C1 = countryArC1.getJSONArray(1); JSONObject countryOb2C1 = countryAr2C1.getJSONObject(0); //For Country 2 // Get the array JSONArray countryArC2 = json2.getJSONArray("myValues"); JSONObject countryObC2 = countryArC2.getJSONObject(0); JSONArray countryAr2C2 = countryArC2.getJSONArray(1); JSONObject countryOb2C2 = countryAr2C2.getJSONObject(0); //Storing JSON item in a Variable String name1 = countryOb2C1.getString(CountryNAME1); String name2 = countryOb2C2.getString(CountryNAME2); //Importing TextView final TextView textView1 = (TextView)findViewById(R.id.url1); final TextView textView2 = (TextView)findViewById(R.id.url2); //Set JSON Data in TextView textView1.setText(name1); textView2.setText(name2); } catch (JSONException e) { // TODO Auto-generated catch block 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; } }
JSONParser:
public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } public JSONObject getJSONFromUrl(String url) { //System.out.println("url getJSONfromUrl " + url); //url = "http://api.worldbank.org/countries/CA/indicators/SP.POP.TOTL?date=1980:1981&format=json"; // Making HTTP request try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); 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(); System.out.println("JSONParser string: " + json); } 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()); } if (json.startsWith("[")) { // We have a JSONArray try { jObj = new JSONObject(); jObj.put("data", new JSONArray(json)); } catch (JSONException e) { Log.d("JSON Parser", "Error parsing JSONArray " + e.toString()); } return jObj; } // 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 jObj; } }
XML:
<TextView android:id="@+id/url1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/url2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/url1" android:layout_marginTop="104dp" />
I think the main problem is new GetJSONTask().execute(url1); and JSONObject json1 = jParser.getJSONFromUrl(url1); Since I cannot have 2 GetJSONTASK, nor can I return json1 and json2 at the same time.
Any idea?
source share