2011-12-14 3 views
3

내 HttpClient, HttpPost 또는 HttpGet 메소드가 한 번만 작동합니다. 처음에는 응답에서 HTML을 성공적으로 로그인 할 수 있지만, 두 번째 시도에서 로그인하면 HTML이 비어 있고 응답을 얻지 못하고 있습니다. 뭐가 문제 야?HttpClient는 Android 1 회만 실행합니다.

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 \tf ++; \t}'html을 웹보기로로드하므로. 문제는 응용 프로그램을 죽이지 않고 두 번째로 로그인 할 때 응답을 얻지 못하는 것입니다. 이것은 html이 없음을 의미합니다. 무엇이 이것을 일으킬 수 있습니까? – Eli

+0

응답의 상태에 대한 단서를 줄 수있는 Logcat에 responsecode를 인쇄하려고합니다. – kosa

답변

2

아니요, 저는 안드로이드 사람이 아닙니다. 스마트 폰을 소유 한 적이 없습니다. (FB도 사용하지 마십시오!) 그래서 이것은 답이 아닌 질문입니다. 여기에 질문을 쓰는 것이 주석 섹션에 입력하는 것보다 쉽습니다. 특히 단락이 좋습니다.

http 연결을 닫거나 해제하지 않는 이유가 있습니까? 내 연결을 닫거나 해제해야하는 경향이 있기 때문에 묻습니다. 나는 서버를 길게 폴링하는 것을 실험 할 때를 제외하고는. 그것은 안드로이드 프로그래밍이 작동하는 방법인가요?

안드로이드가 단일 스레드 또는 멀티 스레드 아키텍처입니까? 연결을 열려고하는 두 개의 스레드가 있으면 어떻게됩니까? 특히 첫 번째 스레드가 연결을 포기하기를 거부 할 때 첫 번째 스레드가 두 번째 스레드를 차단합니까?

각 요청의 의도 한 끝에 연결을 종료하거나 해제하면 어떻게됩니까?

로그인/로그 아웃하면 무엇을 의미합니까? 로그 아웃하겠습니까/연결을 닫으시겠습니까? 서버가 연결을 닫거나 연결이 아직 살아 있도록 특별히 로그 아웃합니까?

+0

도움을 주셔서 대단히 감사드립니다. 당신은 내가 훨씬 더 일찍 이것을 찾지 못한 것에 얼마나 어리 석 었는지 믿지 않을 것입니다. 나는 너무 열심히 찾는 것 같았 어! 연결이 끝날 때마다 정수를 재설정하는 것을 잊었습니다. – Eli

+0

안녕하세요 eli, 당신은 무엇을 했나요? 나는 현재 같은 문제에 직면 해 있습니다. – sakthig