2013-03-07 3 views
1

Я пытаюсь отправить запрос, используя этот кодПолучить ответ JSon для POST

protected void Authenticate(String mUsername, String mPassword) 
    { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://192.168.2.5:8000/mobile/"); 

     try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("username", mUsername)); 
      nameValuePairs.add(new BasicNameValuePair("password", mPassword)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost); 
      System.out.println("this is the response "+response); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      System.out.println("CPE"+e); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      System.out.println("IOE"+e); 
     } 
    } 

Я получаю HttpResponse, так я пытаюсь реализовать правильно? Если да, как мне преобразовать этот ответ в jSON?

LOG-CAT

this is the response [email protected] 
+0

Вы можете использовать мой код. Он более обобщен. Обработка различных типов исключений также –

+0

Я пробовал реализовать ваш код ANR !!!! – onkar

+0

вы должны вызвать второй код в AsyncTask –

ответ

4

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

Это то, что вам нужно

+1

Вы должны реализовать Http-код в AsyncTask, потому что это сетевой код. Если у вас есть журнал, вставьте его в свой вопрос, а также обновите свой вопрос с помощью нового кода. – Naveen

0

Вот что вам нужно сделать

HttpResponse mHttpResponse = mHttpClient.execute(httppost); 
       StatusLine status = mHttpResponse.getStatusLine(); 
       int response = status.getStatusCode(); 
0

Вот пример из blog , Надеюсь, что это помогает

if (response.getStatusLine().getStatusCode() != 200) { 
     throw new RuntimeException("Failed : HTTP error code : " 
      + response.getStatusLine().getStatusCode()); 
    } 

    BufferedReader br = new BufferedReader(
        new InputStreamReader((response.getEntity().getContent()))); 

    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
     System.out.println(output); 
    } 

    httpClient.getConnectionManager().shutdown(); 
+0

Я получаю код ошибки 403 :( – onkar

+0

Это означает, что ваш запрос неверен. Вам нужно увидеть на стороне сервера, почему сервер отказывается запрос. http://en.wikipedia.org/wiki/HTTP_403 –

2

Это поможет вам:

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

// constructor 
public JSONParser() { 

} 

// function get json from url 
// by making HTTP POST or GET method 
public JSONObject makeHttpRequest(String url, String method, 
     List<NameValuePair> params) throws Exception { 

    // Making HTTP request 
    try { 

     // check for request method 
     if (method == "POST") { 
      // request method is POST 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new UrlEncodedFormEntity(params)); 

      // new 
      HttpParams httpParameters = httpPost.getParams(); 
      // Set the timeout in milliseconds until a connection is 
      // established. 
      int timeoutConnection = 10000; 
      HttpConnectionParams.setConnectionTimeout(httpParameters, 
        timeoutConnection); 
      // Set the default socket timeout (SO_TIMEOUT) 
      // in milliseconds which is the timeout for waiting for data. 
      int timeoutSocket = 10000; 
      HttpConnectionParams 
        .setSoTimeout(httpParameters, timeoutSocket); 
      // new 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 

     } else if (method == "GET") { 
      // request method is GET 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      String paramString = URLEncodedUtils.format(params, "utf-8"); 
      url += "?" + paramString; 
      HttpGet httpGet = new HttpGet(url); 
      // new 
      HttpParams httpParameters = httpGet.getParams(); 
      // Set the timeout in milliseconds until a connection is 
      // established. 
      int timeoutConnection = 10000; 
      HttpConnectionParams.setConnectionTimeout(httpParameters, 
        timeoutConnection); 
      // Set the default socket timeout (SO_TIMEOUT) 
      // in milliseconds which is the timeout for waiting for data. 
      int timeoutSocket = 10000; 
      HttpConnectionParams 
        .setSoTimeout(httpParameters, timeoutSocket); 
      // new 
      HttpResponse httpResponse = httpClient.execute(httpGet); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 
     } 

    } catch (UnsupportedEncodingException e) { 
     throw new Exception("Unsupported encoding error."); 
    } catch (ClientProtocolException e) { 
     throw new Exception("Client protocol error."); 
    } catch (SocketTimeoutException e) { 
     throw new Exception("Sorry, socket timeout."); 
    } catch (ConnectTimeoutException e) { 
     throw new Exception("Sorry, connection timeout."); 
    } catch (IOException e) { 
     throw new Exception("I/O error(May be server down)."); 
    } 
    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(); 
     json = sb.toString(); 
    } catch (Exception e) { 
     throw new Exception(e.getMessage()); 
    } 

    // try parse the string to a JSON object 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     throw new Exception(e.getMessage()); 
    } 

    // return JSON String 
    return jObj; 

} 
} 

Вы можете использовать выше класс, как это: например:

public class GetName extends AsyncTask<String, String, String> { 
String imei = "abc"; 
JSONParser jsonParser = new JSONParser(); 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 

protected String doInBackground(String... args) { 
    String name = null; 
    String URL = "http://192.168.2.5:8000/mobile/"; 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("username", mUsername)); 
    params.add(new BasicNameValuePair("password", mPassword)); 
    JSONObject json; 
    try { 
     json = jsonParser.makeHttpRequest(URL, "POST", params); 
     try { 
      int success = json.getInt(Settings.SUCCESS); 
      if (success == 1) { 
       name = json.getString("name"); 
      } else { 
       name = null; 
      } 
     } catch (JSONException e) { 
      name = null; 
     } 
    } catch (Exception e1) { 
    } 
    return name; 
} 

protected void onPostExecute(String name) { 
    Toast.makeText(mcontext, name, Toast.LENGTH_SHORT).show(); 
} 
} 


Как использовать:
Просто создайте новый класс JSONParse, скопировав код класса. Тогда вы можете называть его любым в своем приложении, как показано во втором коде.

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