HttpClient 只会在 Android 上执行一次。

3
我的HttpClient、HttpPost或HttpGet方法只能运行一次。第一次可以成功登录并从响应中获取HTML,但是当我尝试第二次登录时,HTML为空,甚至没有得到响应。出了什么问题?
    public void parseDoc() {
    new Thread(new Runnable() {

        @Override
        public void run() {
            sting.loadData("<p></p>", "text/html", null);
            HttpParams params = new BasicHttpParams();
            HttpClientParams.setRedirecting(params, true);
            httpclient = new DefaultHttpClient();

            httppost = new HttpPost(
                    "https://secure.groupfusion.net/processlogin.php");
            String HTML = "";
            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                        3);
                nameValuePairs
                        .add(new BasicNameValuePair(
                                "referral_page",
                                "/modules/gradebook/ui/gradebook.phtml?type=student_view&jli=t&jli=t&jli=t&jli=t&jli=t&jli=t&printable=FALSE&portrait_or_landscape=portrait"));
                nameValuePairs.add(new BasicNameValuePair("currDomain",
                        "beardenhs.knoxschools.org"));
                nameValuePairs
                        .add(new BasicNameValuePair("username", user));
                nameValuePairs
                        .add(new BasicNameValuePair("password", pass));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpclient.execute(httppost);
                HTML = EntityUtils.toString(response.getEntity());
                Document doc = Jsoup.parse(HTML);
                Element link = doc.select("a").first();
                linkHref = link.attr("href");
                HttpGet request = new HttpGet();
                try {
                    request.setURI(new URI(linkHref));

                } catch (URISyntaxException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                response = httpclient.execute(request);

                InputStream in = response.getEntity().getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(in));
                StringBuilder str = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    str.append(line);
                }
                in.close();
                HTML = str.toString();
                doc = Jsoup.parse(HTML);
                Elements divs = doc.getElementsByTag("tbody");
                for (Element d : divs) {
                    if (i == 2) {
                        finishGrades();
                        f++;
                        break;
                    }
                    i++;
                    ggg = d.html();

                }

            } catch (ClientProtocolException e) {
            } catch (IOException e) {
            }

        }
    }).start();

}

你是否尝试从此线程访问UI元素?finishGrades()函数是做什么的? - Code Poet
这是完成成绩的代码:`public void finishGrades() { htmll = "<html><head><title>Grades</title></head><body><table><tbody>\n" + ggg + "</tbody></table></body></html>"; sting.loadData(htmll, "text/html", null); dialog.dismiss(); f++; }` 它将HTML加载到Web视图中。问题是,第二次登录而不杀死应用程序,我没有得到响应。这意味着没有HTML。可能是什么原因导致这种情况? - Eli
我会尝试将responsecode打印到Logcat中,这可能会提供有关响应状态的一些线索。 - kosa
1个回答

2

好的,我不是安卓用户。从未拥有过智能手机。(也从未使用过FB!)所以这更像是一个问题而不是答案。在这里编写问题比在评论部分打字更容易,尤其是要分段。

你不关闭或释放http连接的原因是什么?我问这个问题是因为我倾向于关闭/释放我的连接。除非当我正在尝试与服务器进行长轮询时。这是安卓编程的工作方式吗?

安卓是单线程还是多线程架构?当您有两个线程尝试打开连接时会发生什么?第一个线程是否会阻塞第二个线程,特别是当第一个线程拒绝放弃连接时?

如果在每个请求的预期结束时关闭或释放连接会发生什么?

登入/登出意味着什么?退出登录会关闭/释放连接吗?您是否特别注销以使服务器关闭连接,还是连接仍然存在?


非常感谢您的帮助。您不会相信我之前为什么这么愚蠢,没有早点找到这个问题。我想我只是过于努力地寻找了!我忘记每次连接通过时重置整数。 - Eli
嗨Eli,你是如何让它工作的?我目前也遇到同样的问题。 - sakthig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接