首页 > 解决方案 > 为什么我的代码无法在使用 JSoup 库的 AsyncTask 中运行我的 Android 活动?

问题描述

public class ConnectionTest extends AsyncTask<Void, Void, Void> {
    String connection;
    String loginFormUrl = "https://intranet.tam.ch/";
    @Override
    protected Void doInBackground(Void... voids) {
        try{
            Connection.Response loginForm = Jsoup.connect(loginFormUrl).method(Connection.Method.GET)
                    .execute();
            connection = loginForm.toString();
            System.out.print(title);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

我的 Activity 应该只在 TextView 中显示连接。我也尝试过创建一个线程并在新线程中运行它,但它也不起作用。

在此处输入图像描述在此处输入图像描述

这是我的活动

public class Test extends AppCompatActivity {
TextView textView;
ConnectionTest connectionTest = new ConnectionTest();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    connectionTest.getWebsite();
    textView = findViewById(R.id.sdweedew);
    textView.setText(connectionTest.connection);
}

}

标签: javaandroidandroid-asynctaskjsoup

解决方案


像这样更改您的活动代码,

我用 aTextView来显示连接的状态。

public class MainActivity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        textView = findViewById(R.id.sdweedew);
        new ConnectionTest().execute();
    }


     class ConnectionTest extends AsyncTask<Void, Void, String> {

        String loginFormUrl = "https://intranet.tam.ch/";

        @Override
        protected String doInBackground(Void... voids) {
            try {
                Connection.Response loginForm = Jsoup.connect(loginFormUrl).method(Connection.Method.GET)
                        .execute();
                return loginForm.statusMessage();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            if (textView != null) {
                textView.setText(s);
            }
            super.onPostExecute(s);
        }
    }
    }

并记得在清单文件中添加 Internet 权限。

<uses-permission android:name="android.permission.INTERNET" />

推荐阅读