当前位置: 首页 > 知识库问答 >
问题:

HttpPost和线程异常

秦弘亮
2023-03-14

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button1 = (Button) findViewById(R.id.button1);

    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            MainActivity.this.runOnUiThread(new Runnable() {

                public void run() {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost(
                            "http://shopstable.turkcell.com.tr/timmenu/getPerosConfig.do");
                    try {

                        HttpResponse response = httpclient
                                .execute(httppost);

                    } catch (ClientProtocolException e) {
                    } catch (IOException e) {
                    }
                }
            });
        }
    });

}

我正在获取NetworkOnMainThreadException。我认为问题出在httppost中,但我无法解决。

共有3个答案

浦毅
2023-03-14

您只需使用这个so get解决方案:这里的SDK版本是您的应用程序的最低SDK版本。。所以你必须在这里设置你的最低sdk版本。并将此代码放在onCreate()方法之后:

if (android.os.Build.VERSION.SDK_INT > 8) {

        StrictMode.ThreadPolicy stp = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(stp);

    }

并将此权限添加到您的清单文件中:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
农飞星
2023-03-14
 // use async task like this .this will solve ur problem


Class A{
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = (Button) findViewById(R.id.button1);

        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                MainActivity.this.runOnUiThread(new Runnable() {

                    public void run() {
                      new RequestLogInFromServer().execute();

                    }
                });
            }
        });

    }




      public class RequestLogInFromServer extends AsyncTask<Object, Object, Object>
        {


            @Override
            protected Object doInBackground(Object... params)
            {

                String responsearray[] = new String[2];
            //JSONObject jsonResponse = null;


            // Create a new HttpClient and Post Header
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://shopstable.turkcell.com.tr/timme/getPerosConfig.do");
            httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");

            try {
                // Add your data

          in case if u want to pass any data to server else leave it

                List<NameValuePair> signinDetails = new ArrayList<NameValuePair>();
                signinDetails.add(new BasicNameValuePair("name",uname));
                signinDetails.add(new BasicNameValuePair("pass",pwd));

                httpPost.setEntity(new UrlEncodedFormEntity(signinDetails));

                // Execute HTTP Post Request
                HttpResponse httpResponse = httpClient.execute(httpPost);
                Log.v("Post Status", "Code: "
                        + httpResponse.getStatusLine().getStatusCode());
                responseCode = httpResponse.getStatusLine().getStatusCode();
                Log.e("responseBody", String.valueOf(responseCode));
                responsearray[0]=String.valueOf(responseCode);
                switch(responseCode){
                case 200:

                Log.e("responseCode", String.valueOf(responseCode));
                HttpEntity entity = httpResponse.getEntity();
                Log.e("entity", String.valueOf(entity));
                if (entity != null) {

                    responsearray[1] = EntityUtils.toString(entity);
                    Log.e("responsearray", String.valueOf(responsearray));


                /*  Log.e("responseBody", String.valueOf(responseBody));
                    JSONTokener jsonTokener = new JSONTokener(responseBody);
                    jsonResponse = new JSONObject(jsonTokener);
                    Log.e("finalResult", String.valueOf(jsonResponse));

                    JSONObject response = jsonResponse.getJSONObject("response");

                    // Getting String inside response object
                    String status = response.getString("status");
                    String message = response.getString("message");
                    Log.e("status", String.valueOf(status));
                    Log.e("message", String.valueOf(message));
                    */

                  } // if (entity != null)  end
                break;                  
                case 503:               
                    responsearray[1]="";

                break;

                default:
                    responsearray[1]="";            
                    break;


                }//switch end

            } catch (ClientProtocolException cpeExp) {
                // TODO Auto-generated catch block
            } catch (Exception allExp) {
                // TODO Auto-generated catch block
            }

            return responsearray;

            }


            @Override
            protected void onPostExecute(Object result) 
            {


                super.onPostExecute(result);
            }

            @Override
            protected void onPreExecute() {

                progressDialog = ProgressDialog.show(SignInActivity.this, "", "Please wait");
                super.onPreExecute();
            }

        }
} //close class A
隗高旻
2023-03-14

当应用程序尝试在其主线程上执行网络操作时,会引发此异常。这仅适用于针对HoneycolmSDK或更高版本的应用程序。允许针对早期SDK版本的应用程序在其主事件循环线程上进行网络连接,但非常不鼓励这样做。在AsyncTask中运行您的代码:

 类似资料:
  • 问题内容: 假设线程是从main方法启动的。如果在线程中引发异常但未在线程中处理异常,会发生什么情况? 是否可以将异常传播回main方法? 问题答案: 我们正在谈论方法抛出的未经检查的异常。默认情况下,您会在系统错误中得到以下信息: 这是printStackTrace处理未处理异常的结果。要处理它,您可以添加自己的UncaughtExceptionHandler: 要为所有线程设置处理程序,请使用

  • 我正在尝试在 Centos 7 上安装卡桑德拉 v3.0.2。我完全按照说明进行操作,我收到以下错误。只是为了重申我做了yum安装jna,版本是在4.0.0在/usr/share/java和卡桑德拉自由目录中 下面是Stacktrace

  • 问题内容: 我已经决定学习如何在Python中完成多线程,并且进行了比较以查看在双核CPU上可以获得什么样的性能提升。我发现我的简单多线程代码实际上比顺序运行的慢,我不知道为什么。 我进行的测试是生成大量随机数,然后打印最大数量 在我的Intel Core 2 Duo上完成大约需要6秒,而大约需要12秒。 然后,我尝试从两个线程调用ox()来查看完成的速度。 大约需要18秒才能完成,并且两个结果会

  • 最近我正在学习Spring框架。所以我正在尝试检查依赖注入在Spring框架中的工作原理。因此,我创建了一个新的java项目并使用基于构造函数XML的配置练习依赖注入代码。运行我的项目后,我收到了这个错误...... 类路径资源[com/mir00r/beans.XML]的XML文档中的第24行无效;嵌套异常为组织。xml。萨克斯。SAXParseException;行号:24;列数:9;cvc复

  • 我正在学习selenium并尝试运行以下代码,但它引发了异常。NoSuchFieldError:空字节数组。请帮助我理解这个简单的程序出了什么问题。 控制台: 异常线程"main"java.lang.NoSuchFieldError:EMPTY_BYTE_ARRAY

  • 主要内容:一、MySql中的线程,二、主要方式,三、源码流程,四、总结一、MySql中的线程 在mysql中,每一个连接上来,就会分配给一个相关的THD数据类。在前面的分析中可以看到,连接器(Connectors)连接到的直接就是连接池,在连接池的线程处理中分为三部分,即一对一(一个连接对应一个线程),多对一(多个连接对应一个线程)和线程池(多对多)。 线程池和线程可以针对不同的具体场景来处理具体的事务,这样既兼顾了效率又提高了适应性,对于新手来说,这就是设计的一个