Почему не работает второй HTTPClient? - PullRequest
0 голосов
/ 27 июля 2011

У меня есть этот код:

protected void onHandleIntent(Intent intent) {
      while (true){

          long endTime = System.currentTimeMillis() + 5*1000;
          while (System.currentTimeMillis() < endTime) {
              synchronized (this) {
                  try {
                      wait(endTime - System.currentTimeMillis());


                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://www.***.***/***/request_sms.php");
                    String HTML = "";
                    try {
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("id", "1"));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                        HttpResponse response = httpclient.execute(httppost);
                        HTML = EntityUtils.toString(response.getEntity());
                    } catch (ClientProtocolException e) {} catch (IOException e) {} 


                        if(HTML.indexOf("[NO TEXTS]") > 0) {

                        } else {
                            Vector<String> all_sms = getBetweenAll(HTML, "<sms>", "<sms>");
                            for(int i = 0, size = all_sms.size(); i < size; i++) {
                                String from = getBetween(all_sms.get(i), "<from>", "</from>");
                                String to = getBetween(all_sms.get(i), "<to>", "</to>");
                                String msg = getBetween(all_sms.get(i), "<msg>", "</msg>");
                                String sent = getBetween(all_sms.get(i), "<sent>", "</sent>");
                                String HTML1 = "";
                                HttpClient httpclient1 = new DefaultHttpClient();
                                HttpPost httppost1 = new HttpPost("http://www.***.***/***/add_sms.php");
                                try {
                                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                                    nameValuePairs.add(new BasicNameValuePair("from", from));
                                    nameValuePairs.add(new BasicNameValuePair("to", to));
                                    nameValuePairs.add(new BasicNameValuePair("msg", msg));
                                    nameValuePairs.add(new BasicNameValuePair("sent", sent));
                                    httppost1.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                                    HttpResponse response1 = httpclient1.execute(httppost1);
                                    HTML1 = EntityUtils.toString(response1.getEntity());
                                    HN.post(new DisplayToast(HTML1)); 
                                } catch (ClientProtocolException e) {} catch (IOException e) {} 

                            }
                        }


                      } catch (Exception e) {
                  }
              }
          }

        }


  }

Это услуга, которую я хочу сделать, чтобы каждые 5 секунд запрашивать страницу с ожидающими SMS-сообщениями, которые должен отправить телефон.Я не на отправляющей части, я просто хочу, чтобы HN.Post (DisplayToast (HTML1)) появился, и тогда я буду работать.HTML1 должен содержать «успех», но я ничего не понимаю.Я уверен, что HTML не содержит «[NO TEXTS]», как я тестировал, и показывает тег с другими тегами внутри него.Что может быть не так?Вот используемые функции:

Handler HN = new Handler(); 


  private class DisplayToast implements Runnable {

    String TM = "";

        public DisplayToast(String toast){
            TM = toast; 
        }

        public void run(){
           Toast.makeText(getApplicationContext(), TM, Toast.LENGTH_SHORT).show();
        }
  }

  public String getBetween(String source, String start, String end) {

        int startindex = source.indexOf(start);
        int endindex = source.indexOf(end, startindex);

        String result = source.substring(startindex + start.length(), endindex);

        return result;
    }

  public Vector<String> getBetweenAll(String source, String start, String end) {
        int startI = 0;
        Vector<String> result = new Vector<String>();
        while (startI + (start.length() + end.length()) < source.length()) {
            int startindex = source.indexOf(start, startI);
            if (startI > startindex) {
                break;
            }
            int endindex = source.indexOf(end, startindex);
            result.add(source.substring(startindex + start.length(), endindex));
            startI = endindex;
        }
        return result;
    }

1 Ответ

0 голосов
/ 27 июля 2011

Используйте org.apache.http.impl.client.BasicResponseHandler для получения содержимого HTML.

HTML1 = httpclient1.execute(httppost1, new BasicResponseHandler());
HN.post(new DisplayToast(HTML1)); 
...