2011-12-14 34 views
3

我的HttpClient,HttpPost或HttpGet方法只能運行一次。我可以成功登錄第一次從響應中獲取html,但是當我嘗試第二次登錄時,html是空白的,我甚至沒有得到響應。怎麼了?HttpClient只會執行一次Android

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

} 
+0

你是否嘗試從這個線程訪問UI元素? 'finishGrades()'做了什麼? –

+0

這是光潔度等級的代碼:'公共無效finishGrades(){ \t \t htmll = 「等級

\ n」 個 \t \t \t \t + GGG + 「
」; \t \t sting.loadData(htmll,「text/html」,null); \t \t dialog.dismiss(); \t \t f ++; \t},因爲它將html加載到web視圖中。問題是,我第二次登錄而不殺應用程序,我沒有得到迴應。這意味着沒有HTML。什麼可能導致這個? – Eli

+0

我會嘗試打印響應代碼給Logcat,它可能會給出一些關於響應狀態的線索。 – kosa

回答

2

好的,我不是一個機器人。從未擁有智能手機。 (從來沒有用過FB!)所以這不僅僅是一個答案而是一個問題。在這裏寫問題比在評論部分輸入更容易,尤其是段落。

是否有任何理由不關閉或釋放http連接?我問,因爲我傾向於關閉/釋放我的連接。除此之外,我正在嘗試長時間輪詢服務器。那是如何android編程的作品?

android是單線程還是多線程架構?當你有兩個線程試圖打開連接時會發生什麼?第一個線程會阻塞第二個線程,特別是當第一個線程拒絕放棄連接時?

如果您在每個請求的預期結束時關閉或釋放連接,會發生什麼情況?

這是什麼意思當你登錄/註銷。註銷釋放/關閉連接?您是否專門註銷,以便服務器關閉連接或連接仍處於活動狀態?

+0

非常感謝您的幫助。你不會相信我是多麼愚蠢,因爲之前沒有找到這麼多。我認爲看起來太難了!每次連接過程中,我都忘記重置一個整數。 – Eli

+0

嗨eli,你做了什麼使它工作..我目前面臨同樣的問題.. – sakthig