Android平台向web應用get、post方式提交信息案例


參考書:瘋狂 android講義

1、效果圖展示

2、界面布局
<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout  xmlns:android ="http://schemas.android.com/apk/res/android"
    android:orientation
="vertical"
    android:layout_width
="fill_parent"
    android:layout_height
="fill_parent"
    
>
< LinearLayout
    
android:orientation ="horizontal"
    android:layout_width
="fill_parent"
    android:layout_height
="wrap_content"
    android:gravity
="center"
    
>
< Button
    
android:id ="@+id/get"   
    android:layout_width
="wrap_content"  
    android:layout_height
="wrap_content"  
    android:text
="@string/get"
    
/>
< Button
    
android:id ="@+id/post"   
    android:layout_width
="wrap_content"  
    android:layout_height
="wrap_content"  
    android:text
="@string/post"
    
/>        
</ LinearLayout >    
< EditText  
    
android:id ="@+id/show"
    android:layout_width
="fill_parent"  
    android:layout_height
="fill_parent"  
    android:editable
="false"
    android:cursorVisible
="false"
    android:gravity
="top"
    
/>
</ LinearLayout >

 

3、改發送get、post請求的工具類,如下:
public  class GetPostUtil
{
     /**
     * 向指定URL發送GET方法的請求
     * 
     * 
@param  url
     *            發送請求的URL
     * 
@param  params
     *            請求參數,請求參數應該是name1=value1&name2=value2的形式。
     * 
@return  URL所代表遠程資源的響應
     
*/
     public  static String sendGet(String url, String params)
    {
        String result = "";
        BufferedReader in =  null;
         try
        {
            String urlName = url + "?" + params;
            URL realUrl =  new URL(urlName);
             //  打開和URL之間的連接
            URLConnection conn = realUrl.openConnection();
             //  設置通用的請求屬性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
             //  建立實際的連接
            conn.connect();
             //  獲取所有響應頭字段
            Map<String, List<String>> map = conn.getHeaderFields();
             //  遍歷所有的響應頭字段
             for (String key : map.keySet())
            {
                System.out.println(key + "--->" + map.get(key));
            }
             //  定義BufferedReader輸入流來讀取URL的響應
            in =  new BufferedReader(
                 new InputStreamReader(conn.getInputStream()));
            String line;
             while ((line = in.readLine()) !=  null)
            {
                result += "\n" + line;
            }
        }
         catch (Exception e)
        {
            System.out.println("發送GET請求出現異常!" + e);
            e.printStackTrace();
        }
         //  使用finally塊來關閉輸入流
         finally
        {
             try
            {
                 if (in !=  null)
                {
                    in.close();
                }
            }
             catch (IOException ex)
            {
                ex.printStackTrace();
            }
        }
         return result;
    }

     /**
     * 向指定URL發送POST方法的請求
     * 
     * 
@param  url
     *            發送請求的URL
     * 
@param  params
     *            請求參數,請求參數應該是name1=value1&name2=value2的形式。
     * 
@return  URL所代表遠程資源的響應
     
*/
     public  static String sendPost(String url, String params)
    {
        PrintWriter out =  null;
        BufferedReader in =  null;
        String result = "";
         try
        {
            URL realUrl =  new URL(url);
             //  打開和URL之間的連接
            URLConnection conn = realUrl.openConnection();
             //  設置通用的請求屬性
            
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
             //  發送POST請求必須設置如下兩行
            conn.setDoOutput( true);
            conn.setDoInput( true);
             //  獲取URLConnection對象對應的輸出流
            out =  new PrintWriter(conn.getOutputStream());
             //  發送請求參數
            out.print(params);
             //  flush輸出流的緩沖
            out.flush();
             //  定義BufferedReade r輸入流來讀取URL的響應
            in =  new BufferedReader(
                 new InputStreamReader(conn.getInputStream()));
            String line;
             while ((line = in.readLine()) !=  null)
            {
                result += "\n" + line;
            }
        }
         catch (Exception e)
        {
            System.out.println("發送POST請求出現異常!" + e);
            e.printStackTrace();
        }
         //  使用finally塊來關閉輸出流、輸入流
         finally
        {
             try
            {
                 if (out !=  null)
                {
                    out.close();
                }
                 if (in !=  null)
                {
                    in.close();
                }
            }
             catch (IOException ex)
            {
                ex.printStackTrace();
            }
        }
         return result;
    }
}
如果需要發送get請求只要調用URLConnection的connect()方法去建立實際的連接即可;如果需要發送post請求,則需要獲取URLConnection的OutputStream,然后再向網絡中輸出請求參數,如以上程序!!!

4、activity程序代碼

public  class GetPostMain  extends Activity
{
    Button get , post;
    EditText show;
    @Override
     public  void onCreate(Bundle savedInstanceState)
    {
         super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        get = (Button) findViewById(R.id.get);
        post = (Button) findViewById(R.id.post);
        show = (EditText)findViewById(R.id.show);
        get.setOnClickListener( new OnClickListener()
        {
            @Override
             public  void onClick(View v)
            {
                String response = GetPostUtil
                    .sendGet("http://192.168.65.1:8080/abc/a.jsp" ,  null);
                show.setText(response);
                
            }            
        });
        post.setOnClickListener( new OnClickListener()
        {
            @Override
             public  void onClick(View v)
            {
                String response = GetPostUtil
                    .sendPost("http://192.168.65.1:8080/abc/login.jsp"
                    , "name=crazyit.org&pass=leegang");
                show.setText(response);
                
            }            
        });    
    }
}

 

該程序所發送的get、post請求都是向本地局域網內:http://192/168.65.1:8080/abc應用下兩個頁面發送,這個應用都是部署在本機的web應用;
url:
http://greatverve.cnblogs.com/archive/2011/12/26/android-get-post.html

Android—Http連接之GET/POST請求

 
   在Android SDK中提供了Apache HttpClient(org.apache.http.*)模塊。在這個模塊中涉及到兩個重要的類:HttpGet和HttpPost。
   創建步驟:
  1、創建HttpGet(或HttpPost)對象,將要請求的URL通過構造方法傳入HttpGet(或HttpPost)對象中;
   2、使用DefaultHttpClient類的execute方法發送HTTP GET或HTTP POST 請求,並返回HttpResponse對象;
   3、通過HttpResponse接口的getEntity方法返回響應信息。
 
   雖然兩者都是按這樣的步驟來實現的,但是實際中兩者又有些區別,具體代碼如下:
   
   HTTP GET請求:
   String url;
   //第一步,創建HttpGet對象
   HttpGet httpGet = new HttpGet(url);
   //第二步,使用execute方法發送HTTP GET請求,並返回HttpResponse對象
   httpResponse = new DefaultHttpClient().execute(httpGet);
   if (httpResponse.getStatusLine().getStatusCode() == 200)
   {
        //第三步,使用getEntity方法活得返回結果
        String result = EntityUtils.toString(httpResponse.getEntity());
    }
 
   HTTP POST請求:
   String url;
   //第一步,創建HttpPost對象
   HttpPost httpPost = new HttpPost(url);
   //設置HTTP POST請求參數必須用NameValuePair對象
   List<NameValuePair> params = new ArrayList<NameValuePair>();
   params.add(new BasicNameValuePair("bookname", etBookName.getText().toString()));
   //設置httpPost請求參數
   httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
   //第二步,使用execute方法發送HTTP GET請求,並返回HttpResponse對象
   httpResponse = new DefaultHttpClient().execute(httpPost);
   if (httpResponse.getStatusLine().getStatusCode() == 200)
   {
        //第三步,使用getEntity方法活得返回結果
        String result = EntityUtils.toString(httpResponse.getEntity());
    }
上述就是對GET和POST方法的講解,兩者有相似的地方也有不同的地方,需要加以區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM