Note that there are some explanatory texts on larger screens.

plurals
  1. POWhy my android app cannot get data from JSON url?
    text
    copied!<p>I am trying to run an app based on WorlBank API. I have a JSON URL to get data about a country and then show it in TextViews. Simple. But as soon as I run the app in closes.</p> <p>Here are my files:</p> <p><strong>Main Activity:</strong></p> <pre><code>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 PAGE = "page"; private static final String VALUE = "value"; private static final String NAME = "name"; private static final String GEO = "region"; JSONArray page = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Creating new JSON Parser JSONParser jParser = new JSONParser(); // Getting JSON from URL JSONObject json = jParser.getJSONFromUrl(url); try{ //Getting JSON Array page = json.getJSONArray(PAGE); JSONObject c = page.getJSONObject(0); //Sorting JSON item in a Variable String value = c.getString(VALUE); String name = c.getString(NAME); String geo = c.getString(GEO); //Importing to TextView final TextView id1 = (TextView) findViewById(R.id.id); final TextView name1 = (TextView) findViewById(R.id.name); final TextView geo1 = (TextView) findViewById(R.id.geo); //set JSON Data in TextView id1.setText(value); name1.setText(name); geo1.setText(geo); } 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; } } </code></pre> <p>JSONParser:</p> <pre><code>public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } public JSONObject 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 jObj; } } </code></pre> <p><strong>XML:</strong></p> <pre><code>&lt;TextView android:id="@+id/id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/name" android:textAppearance="?android:attr/textAppearanceLarge" /&gt; &lt;TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/id" android:textAppearance="?android:attr/textAppearanceLarge" /&gt; &lt;TextView android:id="@+id/geo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/id" android:layout_alignParentTop="true" android:layout_marginTop="76dp" android:textAppearance="?android:attr/textAppearanceLarge" /&gt; </code></pre> <p>Any idea?</p> <p>world bank api: <a href="http://data.worldbank.org/node/18" rel="nofollow">http://data.worldbank.org/node/18</a></p> <p><strong>UPDATE:</strong> </p> <p><em>android:minSdkVersion="8"</em></p> <p><em>android:targetSdkVersion="18"</em></p> <pre><code>FATAL EXCEPTION: main E/AndroidRuntime(966): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jsonsyctask/com.example.jsonsyctask.Main}: android.os.NetworkOnMainThreadException E/AndroidRuntime(966): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) E/AndroidRuntime(966): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) E/AndroidRuntime(966): at android.app.ActivityThread.access$600(ActivityThread.java:141) E/AndroidRuntime(966): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) E/AndroidRuntime(966): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(966): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(966): at android.app.ActivityThread.main(ActivityThread.java:5103) E/AndroidRuntime(966): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(966): at java.lang.reflect.Method.invoke(Method.java:525) E/AndroidRuntime(966): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload