Почему мой код не работает в AsyncTask, использующей библиотеку JSoup для моей активности Android? - PullRequest
0 голосов
/ 17 сентября 2018
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;
    }
}

Моя активность должна просто отображать соединение в TextView. Я также попытался создать поток и запустить его в новом потоке, но он также не будет работать.

enter image description hereenter image description here

Вот моя активность

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);
}

}

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Измените свой код активности следующим образом:

Я использовал TextView для отображения состояния соединения.

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);
        }
    }
    }

И не забудьте добавить Интернет-разрешение в файл манифеста.

<uses-permission android:name="android.permission.INTERNET" />
0 голосов
/ 17 сентября 2018

пожалуйста, проверьте этот код

private void getWebsite() {
 new Thread(new Runnable() {
  @Override
  public void run() {
    final StringBuilder builder = new StringBuilder();

    try {
      Document doc = Jsoup.connect("https://intranet.tam.ch/").get();
      String title = doc.title();
      Elements links = doc.select("a[href]");

      builder.append(title).append("\n");

      for (Element link : links) {
        builder.append("\n").append("Link : ").append(link.attr("href"))
        .append("\n").append("Text : ").append(link.text());
      }
    } catch (IOException e) {
      builder.append("Error : ").append(e.getMessage()).append("\n");
    }

    runOnUiThread(new Runnable() {
      @Override
      public void run() {
       textView.setText(builder.toString());
      }
    });
  }
}).start();

}

...