2017-08-28 161 views
-3

我想在这样的android工作室做POST请求。如何在Android Studio中执行HTTP POST请求?

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


      //submitForm(); 
      tryLogin("[email protected]", "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)

我已经在清单文件中添加Internet权限。 这是因为我没有通过AsyncTask完成它? 我该如何解决这个问题?

+0

使用的AsyncTask ..... –

+1

你不能在主线程上执行网络操作..所以你要使用asynctask – AbhayBohra

+1

使用单独的线程进行网络操作。 asynctask在这种情况下很容易 – AAA

回答

-1

,你可以把你的网络运行在这个线程或使用的AsyncTask或任何其他库

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