【问题标题】:HttpClient will only execute once AndroidHttpClient 只会执行一次 Android
【发布时间】:2011-12-14 01:04:53
【问题描述】:

我的 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() 是做什么的?
  • 这是完成成绩的代码:public void finishGrades() { htmll = "&lt;html&gt;&lt;head&gt;&lt;title&gt;Grades&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;table&gt;&lt;tbody&gt;\n" + ggg + "&lt;/tbody&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;"; sting.loadData(htmll, "text/html", null); dialog.dismiss(); f++; },因为它将 html 加载到 Web 视图中。问题是,我第二次登录时没有杀死应用程序,我没有得到响应。这意味着没有 html。这可能是什么原因造成的?
  • 我会尝试将响应代码打印到 Logcat,这可能会提供有关响应状态的一些线索。

标签: java android httpclient http-post http-get


【解决方案1】:

好吧,我不是安卓人。从未拥有过智能手机。 (也从未使用过 FB!)所以这更像是一个问题而不是一个答案。在这里写问题比在 cmets 部分输入要容易,尤其是段落。

你有什么理由不关闭或释放http连接吗?我问是因为我倾向于关闭/释放我的连接。除了,当我尝试长轮询服务器时。 android编程是这样工作的吗?

android是单线程还是多线程架构?当你有两个线程试图打开一个连接时会发生什么?第一个线程会阻塞第二个线程,尤其是当第一个线程拒绝放弃连接时?

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

登录/注销时是什么意思。注销会释放/关闭连接吗?您是专门注销以便服务器关闭连接还是连接仍然存在?

【讨论】:

  • 非常感谢您的帮助。你不会相信我是多么愚蠢没有早点发现这个。我认为只是看起来太难了!每次连接通过时我都忘记重置一个整数。
  • 嗨 eli,你做了什么使它工作..我目前面临同样的问题..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多