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应用;

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方法的讲解,两者有相似的地方也有不同的地方,需要加以区别

--------------------------------

娇妻如云 http://www.510h.com

剑道独尊 http://www.95wu.com

召唤美女军团 http://www.7wg.net

相关推荐