Android HttpClient框架get和post方式提交数据(非原创)
1.fragment_main.xml
<LinearLayout 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:orientation="vertical" >
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名" /> <EditText
android:id="@+id/et_pass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getClick"
android:text="使用get方式提交" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="postClick"
android:text="使用post方式提交" /> </LinearLayout>
2.MainActivity.java
package com.example.httpclient; import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; import com.example.utils.Utils; public class MainActivity extends Activity {
private EditText et_name;
private EditText et_pass;
// 创建消息处理器来对消息进行处理
Handler handler = new Handler() {
// 重写方法来
public void handleMessage(android.os.Message msg) {
Toast.makeText(MainActivity.this, msg.obj.toString(), 0).show();
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
// 不能放在类的开头初始化,否则会出现空指针异常,先加载再初始化,不然找不到R.id.et_name
et_name = (EditText) findViewById(R.id.et_name);
// 不能放在类的开头初始化,否则会出现空指针异常,先加载再初始化,不然找不到R.id.et_pass
et_pass = (EditText) findViewById(R.id.et_pass);
} public void getClick(View v) {
// 由于不能在主线程中访问网络,所以需要开一个子线程来访问网络
Thread t = new Thread() {
@Override
public void run() {
// 获取输入的用户名
String name = et_name.getText().toString();
// 获取输入的密码
String pass = et_pass.getText().toString();
String url = "http://192.168.1.15:8080/server/serverServlet?name=" + name + "&pass=" + pass;
// 1.创建HttpClient对象,HttpClient是一个接口,可以使用向上转型来创建对象
HttpClient client = new DefaultHttpClient();
// 2.创建HttpGet对象,构造方法的参数就是网址
HttpGet httpGet = new HttpGet(url);
try {
// 3.使用客户端对象,把get请求的对象发送出去
HttpResponse response = client.execute(httpGet);
// 4.拿到响应头中的状态行
StatusLine line = response.getStatusLine();
// 5.根据状态行中服务端返回的状态码来进行判断是否响应成功
if (line.getStatusCode() == 200) {
// 6.拿到返回的响应头的实体
HttpEntity entity = response.getEntity();
// 7.拿到实体的内容,其实就是服务器返回的输入流
InputStream is = entity.getContent();
// 8.从指定的流总读取数据
String text = Utils.getTextFromStream(is);
// 9.创建消息对象
Message msg = handler.obtainMessage();
// 10.使用消息对象携带数据
msg.obj = text;
// 11.使用消息机制发送消息给主线程,让主线程来刷新UI
handler.sendMessage(msg);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
// 启动线程
t.start();
} // post方式提交
public void postClick(View v) {
Thread t = new Thread() {
@Override
public void run() {
try {
// 获取输入的用户名
String name = et_name.getText().toString();
// 获取输入的密码
String pass = et_pass.getText().toString();
// 定好网址
String url = "http://192.168.1.15:8080/server/serverServlet?name=" + name + "&pass=" + pass;
// 1.创建httpClient对象
HttpClient client = new DefaultHttpClient();
// 2.创建HttpPost对象
HttpPost post = new HttpPost(url);
// 3.将要提交的数据封装到BasicNameValuePair对象中,封装用户名
BasicNameValuePair bnvp_name = new BasicNameValuePair("name", name);
// 3.将要提交的数据封装到BasicNameValuePair对象中,封装密码
BasicNameValuePair bnvp_pass = new BasicNameValuePair("pass", pass);
// 4.创建list集合,集合中存放的元素必须是继承了NameValuePair类的对象的引用
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
// 5.将封装好要发送到服务端的数据添加到集合中
parameters.add(bnvp_name);
parameters.add(bnvp_pass);
// 6.创建UrlEncodedFormEntity对象,携带要发送到服务器的数据,并执行URL的编码,需要将name和pass编码然后再发送到服务端
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");
// 7.设置实体,这个实体中携带有要发送的数据
post.setEntity(entity);
// 8.使用客户端发送post请求
HttpResponse response = client.execute(post);
// 9.如果成功接收到服务端返回的状态码
if (response.getStatusLine().getStatusCode() == 200) {
// 10.获取服务端发回的实体中包含的输入流
InputStream is = response.getEntity().getContent();
// 11.从输入流中读取服务端发回的数据
String text = Utils.getTextFromStream(is);
// 12.获取消息
Message msg = handler.obtainMessage();
// 13.使用消息来携带数据
msg.obj = text;
// 14.使用消息机制,发送消息到主线程,让主线程来刷新ui
handler.sendMessage(msg);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t.start();
}
}
3.Utils.java
package com.example.utils; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream; public class Utils { public static String getTextFromStream(InputStream is) {
byte[] buf = new byte[1024];
int len = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String text = "";
try {
while ((len = is.read(buf)) != -1) {
baos.write(buf, 0, len);
}
text = new String(baos.toByteArray(),"UTF-8");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (baos != null) {
try {
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return text;
}
}
4.添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
Android HttpClient框架get和post方式提交数据(非原创)的更多相关文章
- Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)
1.前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...
- Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)
1. 前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2. Android应用会经常使用http协议进行传输,网上会有很 ...
- 使用异步httpclient框架做get,post提交数据
1.将异步httpclient框架导入 下载地址:http://download.csdn.net/detail/sinat_32804317/9555641 2.代码实现 public class ...
- HttpClient的get和post方式提交数据的使用
/** * Http工具类 */ public class HttpUtil { // 创建HttpClient对象 public static HttpClient httpClient = new ...
- Android 使用Post方式提交数据(登录)
在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...
- Android 使用Post方式提交数据
在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...
- Android 采用post方式提交数据到服务器
接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...
- Android学习之Http使用Post方式进行数据提交(普通数据和Json数据)
转自:http://blog.csdn.net/wulianghuan/article/details/8626551 我们知道通过Get方式提交的数据是作为Url地址的一部分进行提交,而且对字节数的 ...
- android 之HttpURLConnection的post,get方式请求数据
get方式和post方式的区别: 1.请求的URL地址不同: post:"http://xx:8081//servlet/LoginServlet" get:http://xxx: ...
随机推荐
- Lanucherr 默认显示第几屏
Launcher.java static final int SCREEN_COUNT = 5;static final int DEFAULT_SCREEN = 2;//第一页是从0开始计数,这里是 ...
- Struts2的模型驱动
Struts2即支持属性驱动,也支持模型驱动 属性驱动:在Action中提供与表单字段一一对应的属性,然后一一set赋值 模型驱动:使得表单字段都自动被set到一个JavaBean中,类似于Strut ...
- [Mac] 使用Mac时的一些技巧
这篇博客就用来记录自己在使用Mac时学来的一些技巧吧! 1. 如何开启 Sticky key (在屏幕上显示输入的控制键) 就是这个东西啦,就是在视频演示的时候让别人看到自己按了什么控制键. 在s ...
- 关于Repeater中绑定的控件不触发ItemCommand事件
今天遇到 在repeater 中使用一个button,点击button然后跳转另外一个页面. html. <asp:Repeater ID="repeater" runat= ...
- hadoop学习之hadoop完全分布式集群安装
注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流.转载请注明来自: http://blog.csdn.net/ab198604/article/details/8250461 要想深入的 ...
- OSharp 学习(一)
OSharp3.0 由郭明峰组织开发,已经相对比较完整,从底层代码开始阅读难度比较大. 故采用自上而下的方式,使用到的时候再完善相关功能.希望通过此教程能够找到志同道合的人. 注:请勿抄袭 请参看OS ...
- Gizmos绘制塔防游戏网格
1.画线脚本写法及地面调整 首先,新建脚本GridMap 新建绘制网格方法(初始数值为10*10) 在类中创建变量 //定义地图宽度 public int m_mapWidth = 10; //地图高 ...
- redhat 5下源码安装nginx服务
首先确保机器中已安装 gcc c++,libtool等工具,保证可执行源码安装 A.为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCRE(Perl Co ...
- CART剪枝
与上篇文章中提到的ID3算法和C4.5算法类似,CART算法也是一种决策树分类算法.CART分类回归树算法的本质也是对数据进行分类的,最终数据的表现形式也是以树形的模式展现的,CART与ID3,C4. ...
- commons.fileupload简单应用
导入包: commons-fileupload-1.3.1.jar commons-io-2.4.jar commons-fileupload依赖于commons-io,commons-io-2.4必 ...