2015-08-26 2 views
1

Я пытаюсь настроить PHP API для взаимодействия с Android-приложением, моя проблема заключается в том, что пост-данные никогда не публикуются, и я никогда не могу получить тело ответа (HTML/TXT) из указанного URL.Android и PHP Создание API

Мой код

Thread thread = new Thread(new Runnable(){ 
     @Override 
     public void run() { 
      try { 
       HttpClient client = new DefaultHttpClient(); 
       HttpPost clientpost = new HttpPost("http://192.168.1.129/updateMain.php"); 

       try { 
        List<NameValuePair> params = new ArrayList<NameValuePair>(2); 

        params.add(new BasicNameValuePair("_id", "1")); 
        params.add(new BasicNameValuePair("job_name", "Test")); 

        clientpost.setEntity(new UrlEncodedFormEntity(params)); 

        HttpResponse response = client.execute(clientpost); 

        String responseBody = EntityUtils.toString(response.getEntity()); 

       } catch(Exception e) 
       { 
        Log.e("Error", e.toString()); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    thread.start(); 

Если я могу отправить данные, то я буду в состоянии отправить JSON на сервер и получить JSON от сервера, таким образом, преодолевая большое препятствие у меня есть на данный момент.

Любая помощь очень ценится.

+2

Рассмотрите возможность использования библиотеки Volley, это быстрее и проще. –

+0

Я проверил залп, снова ответ никогда не печатался ... это был бы другой вопрос сам по себе. Спасибо за совет. –

ответ

1
public String getResponse(String url, List<NameValuePair> nameValuePairs) { 

    url = url.replaceAll(" ", "%20"); 
    String result = "ERROR"; 
    Log.d("Pair", nameValuePairs.toString()); 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpParams http_params = httpclient.getParams(); 
    http_params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, 
      HttpVersion.HTTP_1_1); 
    HttpConnectionParams.setConnectionTimeout(http_params, TIMEOUT); 
    HttpConnectionParams.setSoTimeout(http_params, TIMEOUT); 
    HttpResponse response = null; 

    try { 
     HttpPost httppost = new HttpPost(url); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     response = httpclient.execute(httppost); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
     result = "ERROR"; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     result = "ERROR"; 
    } 

    try { 
     // Get hold of the response entity 
     HttpEntity entity = null; 
     if (response != null) { 
      entity = response.getEntity(); 
     } 
     if (entity != null) { 
      InputStream inputStream = entity.getContent(); 
      result = convertStreamToString(inputStream); 
     } 

    } catch (IOException e) { 
     result = "ERROR"; 
    } 

    httpclient.getConnectionManager().shutdown(); 
    return result; 
} 

Используйте этот метод с AsyncTask или фоновый поток

+0

Просто печатает ошибку, никогда не печатает трассировку стека. Этот метод кажется очень сложным для такой простой задачи? Я, вероятно, ошибаюсь, но это очень много. –

1

Это один работает для меня. Пожалуйста, позаботьтесь об ошибках обработки ошибок. Переменная Key121 - это URL-адрес вашего php-файла.

class callServiceTask extends AsyncTask<Void, Void, Void> 
{ 
    @Override 
    protected Void doInBackground(Void... params) { 
    loginCheck(); 
    return null; 
    } 
} 
public void loginCheck() 
{ 
InputStream is = null; 
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("aa","11")); 
nameValuePairs.add(new BasicNameValuePair("bb","22")); 

    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(KEY_121); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     is = entity.getContent(); 
    }catch(Exception e) 
    { 
     Log.e("log_tag", "Error:"+e.toString()); 
    } 
//convert response to string 
    try{ 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
    sb.append(line + "\n"); 
    } 
    is.close(); 
    result=sb.toString(); 
    Log.e("log_tag", "----------------"+result); 
    }catch(Exception e){ 
    Log.e("log_tag", "Error converting result "+e.toString()); 
    } 
} 

Для анализа ответа необходимо использовать потоковый и буферизированный считыватель. Проверьте и сообщите нам об этом.

+0

К сожалению, для меня не работает, ответ никогда не регистрируется. Log.d («Response», result) никогда ничего не печатает. Также я добавил catch, и я запускаю его в другом потоке. –

+0

@JamesParker: полный код класса обновляется в ответ. Проверьте и сообщите мне свой результат/ошибку. –

+0

Здесь мне понадобится ваш php-файл, так как вы говорите, что другие методы не дают результата. –

Смежные вопросы