Android的NetworkOnMainThreadException [英] Android NetworkOnMainThreadException

查看:119
本文介绍了Android的NetworkOnMainThreadException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到了一个 android.os.NetworkOnMainThreadException 当我尝试从我的电脑主机retreive JSON数据,这是我的code

I got an android.os.NetworkOnMainThreadException when I try to retreive JSON data from my PC-host, here is my code

public JSONObject getJSONObject(String url)
{
    Log.v("", "enter");
    DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
    Log.v("", "httpclient");
    HttpPost httppost = new HttpPost(url);
    Log.v("", "httppost");
    httppost.setHeader("Content-type", "application/json");
    Log.v("", "setHeader");
    InputStream inputStream = null;
    HttpResponse response;
    try
    {
            response = httpclient.execute(httppost);
            Log.v("", "response");
            HttpEntity entity = response.getEntity();
            Log.v("", "entity");
            inputStream = entity.getContent();
            Log.v("", "inputStream");
            Log.v("", buildJSONString( inputStream ));
            return new JSONObject( buildJSONString( inputStream ) );
    }
}

从活动的我的电话

my call from activity

JSONObject jObject = (new JSONParser(this))
                .getJSONObject("http://192.168.0.81:8080/content/test.json");

和我的logcat

09-12 12:32:05.878: V/(11103): enter
09-12 12:32:05.878: V/(11103): httpclient
09-12 12:32:05.878: V/(11103): httppost
09-12 12:32:05.878: V/(11103): setHeader
09-12 12:32:05.878: W/System.err(11103): android.os.NetworkOnMainThreadException
09-12 12:32:05.888: W/System.err(11103):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1108)
09-12 12:32:05.888: W/System.err(11103):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
09-12 12:32:05.888: W/System.err(11103):    at libcore.io.IoBridge.connectErrno(IoBridge.java:133)
09-12 12:32:05.888: W/System.err(11103):    at libcore.io.IoBridge.connect(IoBridge.java:118)
09-12 12:32:05.888: W/System.err(11103):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-12 12:32:05.888: W/System.err(11103):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
09-12 12:32:05.888: W/System.err(11103):    at java.net.Socket.connect(Socket.java:849)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:154)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:580)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:512)
09-12 12:32:05.888: W/System.err(11103):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:490)
09-12 12:32:05.888: W/System.err(11103):    at com.dwaik.jsonparser.JSONParser.getJSONObject(JSONParser.java:72)

它说我的例外是在响应= httpclient.execute(httppost);
我得到了互联网的权限,访问服务器其实我可以从它在相同的应用程序下载文件。
你知道吗?

it states that my exception is at response = httpclient.execute(httppost);
I got internet permission , access to server actually I can download files from it within same app.
Any idea?

推荐答案

您的不允许做网络运营的主(UI)线程。

有使用后台线程的几种方式。 我会建议使用的AsyncTask ,因为它有一个很好的结构,这是很容易理解的。

There are several ways of using background threads. I would recommend using AsyncTask since it has a nice structure which is easy to understand.

http://developer.android.com/reference/android/os/ AsyncTask.html

下面是一个SO例子也:的AsyncTask的Andr​​oid例如

Here is an SO example also: AsyncTask Android example

应该很多关于谷歌更容易获得。

Should be a lot more available on Google.

这篇关于Android的NetworkOnMainThreadException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆