在android中使用jsoup-post方法

在android中使用jsoup-post方法,android,login,jsoup,Android,Login,Jsoup,我想要这样的东西。我有一个按钮和2个文本框,当用户输入用户名和密码,然后单击登录按钮,然后将执行登录操作,然后欢迎用户并转到另一个页面。我的代码如下: try { Connection.Response res = Jsoup.connect("URL") .data("log", "abcd", "pwd", "12345", "wp-submit", "প্রবেশ", "redirect_to", "url",

我想要这样的东西。我有一个按钮和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");
            }
试试看{
Connection.Response res=Jsoup.connect(“URL”)
.数据(“日志”、“abcd”、“pwd”、“12345”、“wp提交”、”প্রবেশ", "将_重定向到“、”url“、”testcookie“、”1”)
.method(method.POST)
.execute();
映射cookies=res.cookies();
文档doc2=Jsoup
.connect(“新url”)
.饼干(饼干)
.get();
s=doc2.text().toString();
t、 setText(s);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
t、 setText(“否”);
}
但是登录操作不可能成功,在这里它总是显示“否”。
我怎样才能成功地做到这一点

我认为这是线程问题。因为您的internet请求位于主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");
       }
    }

}
编辑:
无法在主UI线程上执行internet请求。这就是为什么你需要一个不同的线程。现在你可以实现一个简单的线程而不是
AsyncTask
。那么为什么我建议你使用
AyncTask
。答案是,你不能从一个简单的线程更新你的UI。这就是为什么您需要
AsyncTask
,因为
AsyncTask
为您提供了更新UI的灵活性,但在UI线程之外的不同线程中执行您的方法。

在清单文件中添加了适当的权限?我将此添加到清单文件中:调试您的代码并检查logcat它说了些什么请告诉我们您的
导入
我是android的初学者,无法理解这里的调试正确地说,不要使用普通线程。使用异步任务。你很有可能无法设置t的文本。我的错误,我完全忘记了。我正在编辑我的答案@rvdk,我是否创建了一个新的类名“AsyncExecution”,然后将其命名为new AsyncExecution().execute();从我的MainActivity的onCreate???不是吗???@Shoshino不,你应该创建这个类作为内部类。比如,在MainActivity中,OnCreate()方法创建类之后,这将比创建一个新类@user2029069容易得多。我在回答中添加了解释。检查@user2029069
new AsyncExecution().execute();