【问题标题】:How to do a HTTP POST request in Android Studio? [duplicate]如何在 Android Studio 中执行 HTTP POST 请求? [复制]
【发布时间】:2017-08-28 05:26:09
【问题描述】:

我正在尝试在这样的 android 工作室中发出 POST 请求。

 btnSignin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            //submitForm();
            tryLogin("test@test.com", "Test1234");
        }
    });





protected void tryLogin(String mUsername, String mPassword)
 {
    HttpURLConnection connection;
    OutputStreamWriter request = null;

    URL url = null;
    String response = null;
    String parameters = "email="+mUsername+"&password="+mPassword;
    StrictMode.ThreadPolicy policy = new 
    StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    try
    {
        url = new URL("URL");
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestMethod("POST");

        request = new OutputStreamWriter(connection.getOutputStream());
        request.write(parameters);
        request.flush();
        request.close();
        String line = "";
        InputStreamReader isr = new InputStreamReader(connection.getInputStream());
        BufferedReader reader = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        while ((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
        }
        // Response from server after login process will be stored in response variable.
        response = sb.toString();
        // You can perform UI operations here
        Toast.makeText(this,"Message from Server: \n"+ response, 0).show();
        isr.close();
        reader.close();

    }
    catch(IOException e)
    {
        // Error
    }

但是应用程序崩溃了,我收到这样的错误 -

致命异常:主要

进程:测试,PID:19928

android.os.NetworkOnMainThreadException 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:>1425)

在 java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)

我在清单文件中添加了互联网权限。 这是因为我没有通过 AsyncTask 完成吗? 我怎样才能解决这个问题?

【问题讨论】:

  • 使用 AsyncTask .....
  • 你不能在主线程上执行网络操作..所以你必须使用asynctask
  • 使用单独的线程进行网络操作。在这种情况下,asynctask 很容易
  • 推荐使用okhttp、retrofit或volley等网络库。使用网络库更容易进行网络操作
  • StrictMode.ThreadPolicy 策略 = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); **在 Try Block 之前添加这 2 行

标签: java android http-post


【解决方案1】:

你可以把你的网络操作放在这个线程中,或者使用 asynctask 或任何其他库

new Thread(new Runnable() { 
            public void run(){        
            txt1.setText("Thread!!");
            }
        }).start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多