-2

I'm trying to learn how to read and send json mensages in android.

I tried to follow the 2º answer from: "simplest way to read json from a URL in java", but for some reason it failed at the connection.

Here is the code i used:

    String sURL = "http://freegeoip.net/json/";

    URL url = null;
    try {
        url = new URL(sURL);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    HttpURLConnection request = null;
    try {
        request = (HttpURLConnection) url.openConnection();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        request.connect();
    } catch (IOException e) {
        e.printStackTrace();
    }

    JsonParser jp = new JsonParser();
    JsonElement root = null;
    try {
        root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
    } catch (IOException e) {
        e.printStackTrace();
    }
    JsonObject rootobj = root.getAsJsonObject();
    content.setText(rootobj.get("zip_code").getAsString());

and here are the errors i got:

10-23 08:50:36.120  12366-12366/abff.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: abff.myapplication, PID: 12366
java.lang.RuntimeException: Unable to start activity ComponentInfo{abff.myapplication/abff.myapplication.MainActivity}: android.os.NetworkOnMainThreadException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
        at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
        at java.net.InetAddress.getAllByName(InetAddress.java:215)
        at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
        at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
        at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
        at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
        at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
        at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
        at abff.myapplication.MainActivity.onCreate(MainActivity.java:65)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Community
  • 1
  • 1
André Freitas
  • 273
  • 1
  • 6
  • 17

1 Answers1

2

If you read the error you will see it says: android.os.NetworkOnMainThreadException. You can't perform http requests on the main thread. Make sure you use another thread or an AsyncTask

Jelle van Es
  • 613
  • 6
  • 20