0

ユーザーがユーザー名とパスワードを入力してからログインボタンをクリックすると、ボタンと2つのテキストボックスが必要です。ログインアクションが実行され、ユーザーを歓迎して別のページに移動します.私のコードは次のようでした:

try {
                Connection.Response res = Jsoup.connect("URL")
                        .data("log", "abcd", "pwd", "12345", "wp-submit", "প্রবেশ", "redirect_to", "url", "testcookie", "1")
                        .method(Method.POST)
                        .execute();
                Map<String, String> cookies = res.cookies();

                Document doc2 = Jsoup
                    .connect("new_url")
                    .cookies(cookies)
                    .get();

                s = doc2.text().toString();
                t.setText(s);

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                t.setText("no");
            }

しかし、ログインアクションは成功できず、ここでは常に「いいえ」と表示されます。どうすればそれを成功させることができますか???

4

1 に答える 1

0

糸脱毛の問題だと思います。インターネットリクエストはメインUIスレッドにあるためです。これをテストします:

private class AsyncExecution extends AsyncTask<Void, Void, Void>{
    boolean tracker = false;
    String s = "";
    @Override
    protected Void doInBackground(Void... params) {
       try {
           Connection.Response res = Jsoup.connect("http://www.kuetlive.com/wp-login.php")
                        .data("log", "abcd", "pwd", "12345", "wp-submit", "প্রবেশ", "redirect_to", "http://www.kuetlive.com/wp-admin/", "testcookie", "1")
                        .method(Method.POST)
                        .settimeout(60000)//time set for the connection 1 min
                        .execute();
                Map<String, String> cookies = res.cookies();

                Document doc2 = Jsoup
                    .connect("http://www.kuetlive.com/wp-admin/profile.php")
                    .cookies(cookies)
                    .get();

                s = doc2.text().toString();
                tracker = true;

       } catch (Exception e) {
           // TODO Auto-generated catch block
           Log.e("tag", e.toString());
           tracker = false;

       }
     }
  --- // }  // --- i add this by mistake, delete this

    @Override
    protected void onPostExecute(Void result) {
       if(tracker){
            t.setText(s);
       }else{
            t.setText("no");
       }
    }

}

そしてそれを次のように呼びます

new AsyncExecution().execute();

編集済み: メインUIスレッドでインターネットリクエストを実行することはできません。そのため、別のスレッドが必要です。これで、uの代わりに単純なスレッドを実装できますAsyncTask。それならなぜ私はあなたに使用することを提案しますAyncTask。答えは、単純なスレッドからUIを更新することはできないということです。これが、 UIを更新する柔軟性を提供するが、UIスレッドの横にある別のスレッドでメソッドを実行するAsyncTaskために必要な理由です。AsyncTask

于 2013-02-20T09:16:01.633 に答える