【发布时间】: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 很容易
-
StrictMode.ThreadPolicy 策略 = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); **在 Try Block 之前添加这 2 行