java - 为什么这段代码不能在 android 9 上正确运行?

标签 java android android-asynctask android-9.0-pie

我有一个项目连接到 LAMP 服务器并使用 AsyncTask 获取一些数据。该应用程序可以在从 API 16 到 API 26 的所有 Android API 上正确运行。但是,当在 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 有关。 。该链接指向一篇 Android 开发者博客文章,详细介绍了 Android P 上引入的与网络安全相关的限制,基本上禁止明文通信,除非您采取措施将某些域列入白名单。

关于java - 为什么这段代码不能在 android 9 上正确运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57028068/

相关文章:

javax.crypto.BadPaddingException

java - Gradle 构建因 TransformException 失败

android - Android 应用的 Google Analytics v3 中缺少跟踪 ID (&id) 参数

java - 如何从 Spring 属性文件加载数字列表

java - 调用接口(interface)中的私有(private)方法

java - 我可以使用哪种 Java 线程池来处理来自套接字的数据?

java - 当我将 .jar 文件包含到我的 android 项目中时出现 Dex 错误

java - 如何在 android 中将字符串参数传递给 AsyncTask

android - 在 AsyncTask 操作期间未显示不确定的 ProgressBar

android - 异步任务返回结果