为什么这段代码没有 运行 on android 9 正确?
Why this code do not run on android 9 correctly?
我有一个连接到 LAMP 服务器并使用 AsyncTask 获取一些数据的项目。此应用程序 运行 在所有 Android API 上从 API 16 到 API 26 正确。但是在 Android 9 (API 28) 上检查它时,在我在下面显示的代码中变量 "res" 不返回任何数据。
为什么?
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class loginserver extends AsyncTask {
private String Link = "";
private String User = "";
private String Pass = "";
public loginserver(String link, String user, String pass) {
Link = link;
User = user;
Pass = pass;
}
@Override
protected Object doInBackground(Object[] objects) {
try {
String data = URLEncoder.encode("username", "UTF8") +
"=" + URLEncoder.encode(User, "UTF8");
data += "&" + URLEncoder.encode("password", "UTF8") +
"=" + URLEncoder.encode(Pass, "UTF8");
URL url = new URL(Link);
URLConnection urlConnection = url.openConnection();
urlConnection.setDoOutput(true);
OutputStreamWriter outputStreamWriter =
new OutputStreamWriter(urlConnection.getOutputStream());
outputStreamWriter.write(data);
outputStreamWriter.flush();
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
SecondActivity.res = stringBuilder.toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
鉴于 API 28 出错,我怀疑这与 this 有关。 link 是 Android 开发者博客 post 详细介绍了 Android P 上引入的与网络安全相关的限制,基本上禁止明文通信,除非您采取措施将某些域列入白名单。
我有一个连接到 LAMP 服务器并使用 AsyncTask 获取一些数据的项目。此应用程序 运行 在所有 Android API 上从 API 16 到 API 26 正确。但是在 Android 9 (API 28) 上检查它时,在我在下面显示的代码中变量 "res" 不返回任何数据。 为什么?
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class loginserver extends AsyncTask {
private String Link = "";
private String User = "";
private String Pass = "";
public loginserver(String link, String user, String pass) {
Link = link;
User = user;
Pass = pass;
}
@Override
protected Object doInBackground(Object[] objects) {
try {
String data = URLEncoder.encode("username", "UTF8") +
"=" + URLEncoder.encode(User, "UTF8");
data += "&" + URLEncoder.encode("password", "UTF8") +
"=" + URLEncoder.encode(Pass, "UTF8");
URL url = new URL(Link);
URLConnection urlConnection = url.openConnection();
urlConnection.setDoOutput(true);
OutputStreamWriter outputStreamWriter =
new OutputStreamWriter(urlConnection.getOutputStream());
outputStreamWriter.write(data);
outputStreamWriter.flush();
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
SecondActivity.res = stringBuilder.toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
鉴于 API 28 出错,我怀疑这与 this 有关。 link 是 Android 开发者博客 post 详细介绍了 Android P 上引入的与网络安全相关的限制,基本上禁止明文通信,除非您采取措施将某些域列入白名单。