2015-02-13 4 views
0

Я пытаюсь отобразить ответ, когда я делаю запрос POST. Но ничего не происходит, к сожалению. Чтобы ухудшить ситуацию, когда я использую отладчик, он зависает в этой строке HttpResponse response = httpClient.execute(httpPost);, поэтому я не вижу, действительно ли мой запрос POST работал.HttpPost не отображает ответ JSON

Ответ от URL-адреса поступает как JSON, поэтому, возможно, я не настроил его правильно. Я очень новичок в запросах JSON и Http ...

Может ли кто-нибудь сказать мне, нужно ли что-то менять с помощью этого метода?

private void makePostRequest() { 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost("http://blablabla.com"); 

    //Post Data 
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2); 
    nameValuePair.add(new BasicNameValuePair("username", login.getText().toString())); 
    nameValuePair.add(new BasicNameValuePair("password", password.getText().toString())); 
    //Encoding POST data 
    try { 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 
     } catch (UnsupportedEncodingException e) { 
     // log exception 
     e.printStackTrace(); 
     } 
    //making POST request. 
    try { 
     HttpResponse response = httpClient.execute(httpPost); 
     // write response to log 
     Log.d("Http Post Response:", response.toString()); 
     } catch (ClientProtocolException e) { 
     // Log exception 
     e.printStackTrace(); 
    } catch (IOException e) { 
    // Log exception 
    e.printStackTrace(); 
    } 

    } 
+0

Есть ли распечатка трассировки стека, которая показывает, что ваш запрос на сообщение не прошел? – iRuth

+0

Нет ничего, показывая, что это не сработало, но ничто не показывает, что оно сработало либо ... – user2456977

+0

Какой код ответа вы получаете, когда добавляете эту строку -> 'int responseCode = response.getStatusLine(). GetStatusCode();' после выполнения запроса HTTP-почты (после ответа HttpResponse = httpClient.execute (httpPost); ')? – iRuth

ответ

0

Просто попробуйте this..it будет работать

public static JSONObject PutRequest(String url, JSONObject params,Boolean isPost) 
{ 
    String result=null; 
    try 
    { 

     String getUrl = url; 
     jsonResponse=null; 
     Log.i("Calling URL", getUrl); 
     int i = 0; 

     HttpClient httpclient= new DefaultHttpClient(); 
     HttpResponse httpresponse=null; 
     if(isPost){ 
      HttpPost httppost= new HttpPost(getUrl); 
      String json = ""; 
      json = params.toString(); 
      StringEntity se = new StringEntity(json); 
      httppost.setEntity(se); 
      httppost.setHeader("Accept", "application/json"); 
      httppost.setHeader("Content-type", "application/json");    
      httpresponse=httpclient.execute(httppost); 
     } 
     HttpEntity entity=httpresponse.getEntity(); 
     InputStream is=entity.getContent(); 
     result=ConvertStreamToString(is);   


     Log.i("Post Detail", params.toString()); 
     Log.i("Responsen String", result.toString()); 
     jsonResponse=new JSONObject(result.toString()); 
     Log.i("Jsonobject Before", jsonResponse.toString()); 
     JSONObject obj; 
     try { 
      obj = (JSONObject) jsonResponse.get("response"); 
      jsonResponse=obj; 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Log.i("Jsonobject After", jsonResponse.toString()); 
     //return (new Gson()).toJson(jsonResponse,DataObject.class);*/ 

    }catch(Exception e) 
    { 
     Log.d("Exception",e.getMessage()); 
    } 
    return jsonResponse; 
} 

public static String ConvertStreamToString(InputStream is){ 
    BufferedReader reader=new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb=new StringBuilder(); 
    String line=null; 
    try{ 
     while ((line=reader.readLine())!=null) { 
      sb.append(line+"\n");    
     } 
    }catch (IOException e) {    
     Log.i("ERROR",e.getMessage()); 
    }finally{ 
     try { 
      is.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      Log.i("ERROR",e.getMessage()); 
     } 
    } 
    return sb.toString(); 
} 
+0

К сожалению, он не работает. Мне нужно изменить метод httppost.setHeader? Два значения Json, на которые должен отвечать ответ, - это «id» и «описание» пользователя. Итак, как мне получить эти результаты от входа? – user2456977

0
public class WebWeb { 

public static String send(String url) { 
    final StringBuilder builder = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 

    HttpGet httpGet = new HttpGet(url); 

    try { 
     BufferedReader reader; 
     HttpResponse response = client.execute(httpGet); 
     HttpEntity entity = response.getEntity(); 
     InputStream content = entity.getContent(); 
     reader = new BufferedReader(new InputStreamReader(content)); 

     String line; 
     while ((line = reader.readLine()) != null) { 
      builder.append(line); 
     } 
    } catch (Exception e) { 
    } 
    Log.e("error", builder.toString()); 
    return builder.toString(); 
} 

}

Вам потребуется разрешение INTERNET в manifist Используйте этот метод в методе doInBackground Асинхронного Task в другом случае, он ll throw networkOnMainThreadException.

0

Я думаю, вы должны организовать свой код запроса HTTP, так что будет легче найти ошибку. Кроме того, это всегда хорошая практика для дезинфекции ввода пользователя, прежде чем использовать его. В вашем случае вы должны проверить, являются ли username и password пустыми.

private String makePostRequest() { 

    HttpClient httpClient = new DefaultHttpClient(); 

    HttpPost httpPost; 

    HttpResponse response = null; 

    String responseString = ""; 

    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); 

    // check if the user's input is empty before using it 
    nameValuePair.add(new BasicNameValuePair("username", login.getText().toString())); 
    nameValuePair.add(new BasicNameValuePair("password", password.getText().toString())); 

    try { 

     /* post request */ 
     httpPost = new HttpPost("http://blablabla.com"); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 
     response = httpClient.execute(httpPost); 
     responseString = EntityUtils.toString(response.getEntity()); 
     int responseCode = response.getStatusLine().getStatusCode(); 
    } catch (ClientProtocolException e) { 
     Log.e("ClientProtocolException", e.getMessage()); 
    } catch (UnsupportedEncodingException e) { 
     Log.e("UnsupportedEncodingException", e.getMessage()); 
    } catch (IOException e) { 
     Log.e("IOException", e.getMessage()); 
    } 
} 

Надеюсь, это поможет.

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