2014-07-16 28 views
1

我目前正在學習開發android應用程序。我需要從我的android應用程序分析變量到servlet。我使用HttpResponse來解析變量。但我不知道如何接受servlet中的參數。如何從servlet中的HttpResponse獲取內容?

這是我在android應用程序中的代碼。

// Create a new HttpClient and Post Header 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://<ip_address>:8080/GetPhoneNumber/GetPhoneNumberServletServlet"); 

      try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       nameValuePairs.add(new BasicNameValuePair("phoneNum", "12345678")); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } // End of onClick method 

我可以知道在servlet的doPost/doGet中應該怎麼做?

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    PrintWriter out = response.getWriter(); 
    out.println("Hello Android !!!!"); 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
} 

回答

1

在你doPost使用request.getParameter("phoneNum")

0

我認爲下面的代碼可以幫助你。

public class CustomHttpClient 
{ 
public static final int HTTP_TIMEOUT = 30 * 1000; 
private static HttpClient mHttpClient; 
private static HttpClient getHttpClient() 
{ 
    if (mHttpClient == null) 
    { 
    mHttpClient = new DefaultHttpClient(); 
    final HttpParams params = mHttpClient.getParams(); 
    HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT); 
    HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT); 
    ConnManagerParams.setTimeout(params, HTTP_TIMEOUT); 
    } 
    return mHttpClient; 
} 
public static String executeHttpPost(String url,ArrayList<NameValuePair> postParameters) throws Exception 
    { 
    BufferedReader in = null; 
    try 
    { 
     HttpClient client = getHttpClient(); 
     HttpPost request = new HttpPost(url); 
     UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
     request.setEntity(formEntity); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String line = ""; 
     String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) { 
     sb.append(line + NL); 
    } 
    in.close(); 
    String result = sb.toString(); 
    return result; 
    } 
    finally 
    { 
    if (in != null) 
    { 
    try 
     { 
     in.close(); 
     } 
    catch (IOException e) 
     { 
     Log.e("log_tag", "Error converting result "+e.toString()); 
     e.printStackTrace(); 
     } 
    } 
    } 
} 
public static String executeHttpGet(String url) throws Exception 
    { 
     BufferedReader in = null; 
     try 
      { 
       HttpClient client = getHttpClient(); 
       HttpGet request = new HttpGet(); 
       request.setURI(new URI(url)); 
       HttpResponse response = client.execute(request); 
       in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
       StringBuffer sb = new StringBuffer(""); 
       String line = ""; 
       String NL = System.getProperty("line.separator"); 
       while ((line = in.readLine()) != null) { 
       sb.append(line + NL); 
      } 
    in.close(); 
    String result = sb.toString(); 
    return result; 
    } 
finally 
    { 
     if (in != null) 
      { 
       try 
        { 
         in.close(); 
        } 
       catch (IOException e) 
        { 
         Log.e("log_tag", "Error converting result "+e.toString()); 
         e.printStackTrace(); 
        } 
      } 
    } 
    } 
} 

擴展中心: -

使用下面的JSON解析器類: -

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 mehtod 
    public JSONObject makeHttpRequest(String url, String method, 
      List<NameValuePair> params) { 

     // 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)); 

       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); 

       HttpResponse httpResponse = httpClient.execute(httpGet); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
      }   


     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     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(); 
      Log.d("json data",json.toString()); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 
} 

現在,如果你想在服務器上發送任何東西,說你需要保存的用戶名和密碼使用JSON解析器和PHP的服務器在任何線程或異步任務的doInBackground方法中使用下面的代碼。

ArrayList<NameValuePair> Insert = new ArrayList<NameValuePair>(); 
        Insert.add(new BasicNameValuePair("User_Name","<Sting denoting username>")); 
        Insert.add(new BasicNameValuePair("Password","<Sting denoting Password>)); 

        try 
        { 
         HttpClient httpclient = new DefaultHttpClient(); 
         HttpPost httppost = new HttpPost("http://server path/yourphpfile.php"); 
         httppost.setEntity(new UrlEncodedFormEntity(Insert)); 
         HttpResponse response = httpclient.execute(httppost); 
         HttpEntity entity = response.getEntity(); 
         is = entity.getContent(); 
        } 
        catch(Exception e) 
        { 
         Log.e("log_tag", "Error in http connection"+e.toString()); 
        } 

現在,如果你需要這些值回使用JSON解析器get方法,用戶在線程或異步任務的doInBackground方法再下面的代碼。

public class CountDownTask extends AsyncTask<Void,Void , Void> 
    { 
     protected void onPreExecute() 
     { 
      count = 0; 
      S_Store_Id = null; S_Store_Name = null;S_Store_Address = null; S_Store_Phone= null; 
      Offers = null; Descriptions = null; 
     } 
     protected Void doInBackground(Void... params) 
     { 

      ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("User_Name",StringUserName)); 
      String response = null; 
      try 
      { 
       response = CustomHttpClient.executeHttpPost("http://yourserverpath/yourphpfilefor retrivingdata.php",postParameters); 
       String result = response.toString(); 
       try 
       { 
        JSONArray jArray = new JSONArray(result); 

        JSONObject json_data = jArray.getJSONObject(0); 

        StringUserName = json_data.getString("User_Name"); 
        StringPassword = json_data.getString("Password"); 

        json_data = jArray.getJSONObject(1); 
        } 
       catch(JSONException e) 
       { 
        Log.e("log_tag", "Error parsing data "+e.toString()); 
       } 
      } 
      catch (Exception e) 
      { 
       Log.e("log_tag","Error in http connection!!" + e.toString());  
      } 
      return null; 
     } 

現在你可以編寫邏輯在相應的PHP文件從服務器中插入和retriving數據,並將它們用於使用來自服務器的數據。此方法的作用等同於HTTP請求和響應的HTTP Get和Post方法。

希望它可以幫助你..謝謝...

+0

我如何在servlet –

+1

我doPost方法實現這個好,如果你只是需要解析和發送或從服務器得到任何東西,那麼爲什麼不你沒有使用JSON解析器。它會解決你的問題。 –

+0

只是問你的建議。用php或java servlets更容易實現嗎?由於我只熟悉java,我不太確定php是否更容易,因爲我在網上看到了一些實現。 –