2015-09-28 4 views
1

Я пытаюсь отправить строку в php-скрипт. Этот скрипт возвращает строку со значениями, разделенными точкой с запятой (например, «привет, мир»).Android httppost без результата

Я реализовал тест для этой строки, поэтому я могу протестировать ее в своем браузере, и она работает. Но мое приложение не получает никаких результатов.

Вот мой код

public class GetInformationForBarcode extends AsyncTask<String, Void, Product> { 

    public String url = "myexample.com" //yes, in my code it is a real url ;) 

    private Product getInformationForBarcode(String barcode) { 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(this.url); 

     try { 
      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
      nameValuePairs.add(new BasicNameValuePair("ean", barcode)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      if(response.getEntity().getContentLength() > 0){ 
       Product product = new Product(); 
       HttpEntity entity = response.getEntity(); 
       StringBuilder sb = new StringBuilder(); 
       try { 
        BufferedReader reader = 
          new BufferedReader(new InputStreamReader(entity.getContent()), 65728); 
        String line = null; 

        while ((line = reader.readLine()) != null) { 
         sb.append(line); 
        } 
        String[] productData = sb.toString().split(";"); 

        product.setName(productData[0]); 
        product.setProducer(productData[1]); 
       } 
       catch (IOException e) { e.printStackTrace(); } 
       catch (Exception e) { e.printStackTrace(); } 

       Log.e("finalResult " , sb.toString()); 
       product.setBarcode(barcode); 
       return product; 
      } 
     } 
     catch(Exception e) 
     { 
      Log.e("log_tag", "Error: " + e.toString()); 
     } 
     return null; 
    } 

    @Override 
    protected Product doInBackground(String... param) { 
     getInformationForBarcode(result); 
     return null; 
    } 
} 

Я надеюсь, что кто-то может помочь мне с этим.

ответ

0

эта проверка

if(response.getEntity().getContentLength() > 0) 

не является правильным. Заголовок http ContentLength может быть установлен в 0. rfc не заставляет указать правильный размер. Вместо этого вы должны проверить код ответа для запроса http. Проверка должна быть:

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) 

затем попробуйте прочитать содержание ответа. По rfc HTTP 200 является request ok и HTTP 204 является Request ok No Content

+0

Он не делает, если. Последней строкой, которую я могу получить, является выполнение. После этого он ломает попытку. 09-28 10: 53: 51.824 16318-16601 /? E/log_tag: Ошибка: javax.net.ssl.SSLPeerUnverifiedException: Отсутствует сертификат peer То, что я получаю. – user3244807

+0

- это URL-адрес https? – Blackbelt

+0

есть. удалить s? – user3244807