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

來源:互聯網
上載者:User

參考書:瘋狂 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方法的講解,兩者有相似的地方也有不同的地方,需要加以區別
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.