Android中的Http通信
来源:互联网 发布:女程序员好找工作吗 编辑:程序博客网 时间:2024/06/05 04:32
android 和服务器通信,通常有post 和get 方法。这里写了一个小案例,模拟手机注册账户,把name和age信息提交到服务器。由于在UI线程不能做联网操作,我们自定义一个线程类HttpThread继承Thread
package com.example.registeractivity;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;public class PostThread extends Thread { String url; String name; String age; public PostThread(String url, String name, String age) { super(); this.url = url; this.name = name; this.age = age; } @Override public void run() {// doGet(); doPost(); super.run(); } private void doHttpClientPost() { String urlPostfix = "name="+name+"&age="+age; HttpPost post = new HttpPost(url); HttpClient client = new DefaultHttpClient(); ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("name", name)); params.add(new BasicNameValuePair("age", age)); try { post.setEntity(new UrlEncodedFormEntity(params)); HttpResponse response = client.execute(post); HttpEntity entity = response.getEntity(); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { Log.w("POST", "post OK "+response.toString()); } String content = EntityUtils.toString(entity); Log.w("content:", content); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void doHttpClientGet() { url = url+ "?name="+name+"&age="+age; HttpGet get = new HttpGet(url); HttpClient client = new DefaultHttpClient(); try { HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //如果状态为200, HttpEntity entity = response.getEntity(); String content = EntityUtils.toString(entity); System.out.println(content); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //GET方式 private void doGet() { url = url+ "?name="+name+"&age="+age; try { URL httpUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection(); conn.setRequestMethod("GET"); conn.setReadTimeout(5000);//設置5秒超時 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { sb.append(line); } System.out.println("result:"+sb.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //POST方式 private void doPost() { String urlPostfix = "name="+name+"&age="+age; try { URL httpUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection(); conn.setRequestMethod("POST"); conn.setReadTimeout(5000);//設置5秒超時 OutputStream out = conn.getOutputStream(); out.write(urlPostfix.getBytes()); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { sb.append(line); } System.out.println("result:"+sb.toString()); } catch (Exception e) { e.printStackTrace(); } }}
线程定义好,看看布局,两个输入框,一个按钮,点击提交
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context="com.example.registeractivity.MainActivity" > <LinearLayout android:id="@+id/ll1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:gravity="center_vertical" android:orientation="horizontal" > <TextView android:id="@+id/tv_name" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="姓名" /> <EditText android:id="@+id/et_name" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center_vertical" android:layout_alignParentTop="true" android:layout_toRightOf="@id/tv_name" android:layout_weight="5" android:ems="10" android:hint="请输入姓名" /> </LinearLayout> <LinearLayout android:id="@+id/ll2" android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/ll1" android:orientation="horizontal" > <TextView android:text="年龄" android:layout_width="0dp" android:layout_height="match_parent" android:layout_below="@+id/tv_age" android:gravity="center_vertical" android:layout_weight="1" /> <EditText android:id="@+id/et_age" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center_vertical" android:layout_toRightOf="@id/tv_age" android:layout_weight="5" android:ems="10" android:hint="请输入年龄"/> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bt_submit" android:layout_below="@id/ll2" android:layout_alignParentRight="true" android:text="提交" /></RelativeLayout>
效果是这样的
然后在activity里初始化视图,给按键添加监听:
package com.example.registeractivity;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity { private EditText mEtName; private EditText mEtAge; private Button mBtSubmit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } //http://localhost:8080/web/MyServlet?name=laxian&age=2011 private void initView() { mEtName = (EditText) findViewById(R.id.et_name); mEtAge = (EditText) findViewById(R.id.et_age); mBtSubmit = (Button) findViewById(R.id.bt_submit); mBtSubmit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //本机开的服务器,ip地址可以通过dos命令:ipconfig 查看 String url = "http://192.168.31.126:8080/web/MyServlet"; HttpThread thread = new HttpThread(url, mEtName.getText().toString(), mEtAge.getText().toString()); thread.start();; } }); }}
服务器呢,如果装有tomcat,新建一个dynamic web project,名叫loginServer新建一个login.jsp文件,添加一个表单,测试一下,以备手机端访问使用
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body> <form action="MyServlet" method="get"> name:<input type="text" name="name"><br> age:<input type="text" name="age"><br> submit:<input type="submit" value="submit"><br> </form></body></html>
,同时新建一个servlet,重写doPost()和doGet()方法。
/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String age = request.getParameter("age"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("name: "+new String(name.getBytes("iso-8859-1"),"utf-8")+" age: "+age); System.out.println("name: "+new String(name.getBytes("iso-8859-1"),"utf-8")+" age: " +" age: "+age); }
然后启动服务loginServer,右键,run on server
再然后,运行App,测试
这就成功了,
GET和POST方法结果一样。
代码下载
0 0
- Android中的Http通信
- Android中的Http通信
- Android中的Http通信
- Android中的http通信
- Android中的Http通信(一)
- Android中的Http通信(二)
- android中的网络通信(三) Apache HTTP
- Android中的HTTP通信笔记(慕课网)
- android中的http通信(1)
- Android中的Http通信(一)之Http协议基本知识
- Android中的Http通信(一)之Http协议基本知识
- 【Android实战之旅 006】Android中的HTTP通信
- unity3d中的http通信
- unity3d中的http通信
- unity3d中的http通信
- unity3d中的http通信
- unity3d中的http通信
- unity3d中的http通信
- 1042. 字符统计(20)
- openssl for android使用
- 单向链表的操作
- 杭电acm2304
- 数据库
- Android中的Http通信
- CSS常用的单词用法以及解释
- iOS项目开发实战——使用定时器实现循环操作
- Linux下的nginx启动、重新启动
- spring简化JMS异步消息
- 如何配置JDK环境
- 第十八篇:UI编程练习
- 数据库类(受虐不停,更新不止)
- 数字在排序数组中出现的次数