如何解决Networkonmainthreadexception

时间:2011-12-08 06:24:53

标签: android

我打电话给房地产网站的网络服务,为此我建立了我自己的方法和所有.. 我开发了一个执行方法,我将根据我的要求设置我的URL,如下所示:

 public void Execute(RequestMethod method) throws Exception
    {
        switch(method) {
            case GET:
            {
                //add parameters
                String combinedParams = "";
                if(!params.isEmpty()){
                    combinedParams += "?";
                    for(NameValuePair p : params)
                    {
                        String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8");
                        if(combinedParams.length() > 1)
                        {
                            combinedParams  +=  "&" + paramString;
                        }
                        else
                        {
                            combinedParams += paramString;
                        }
                    }
                }

                HttpGet request = new HttpGet(url + combinedParams);

                //add headers
                for(NameValuePair h : headers)
                {
                    request.addHeader(h.getName(), h.getValue());
                }

                **executeRequest(request, url);** // This throws an exception
                break;
            }
            case POST:
            {
                HttpPost request = new HttpPost(url);

                //add headers
                for(NameValuePair h : headers)
                {
                    request.addHeader(h.getName(), h.getValue());
                }

                if(!params.isEmpty()){
                    request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                }

                executeRequest(request, url);
                break;
            }
        }
    }

在get case中,我使用带有我想要的url的httpget发送请求,但那时生成了主线程异常的网络。

3 个答案:

答案 0 :(得分:2)

在您的AndroidManifest中,您还可以使用以下内容跳过错误:

<uses-sdk android:minSdkVersion="8" 
        android:targetSdkVersion="8" />

答案 1 :(得分:1)

将您的代码更改为低于1,即以这种方式执行调用

new Thread()
{
    @Override
    public void run()
    {
        Execute();
    }
}.start();

答案 2 :(得分:0)

您必须使用ThreadAsyncTaskthis post解释了很多关于此错误的内容。