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: ...
随机推荐
- 刷新 tableview
UITableView对于iOS开发者来说一定不会陌生,很有可能你的APP很多界面都用到它.关于UITableView的文章,想必已经不计其数,没事可以多看看.特别是UITableView优化的文章, ...
- hdu1406
一道很水很水的题!!!!!!!!!! #include<iostream> using namespace std; int main(){ int num1,num2,i,k,j,sum ...
- git命令收集整理
git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...
- C++第二课(2013.9.27 )
//引用的作用:代码简洁 //形参和实参同地址,实现的方式和指针的一样 //引用和指针没有本质的区别 //强转引用 float f = 3.14f; cout<< hex << ...
- destoon实现商铺管理主页设置增加新菜单的方法
1.打开/lang/zh-cn/home.inc.php,找到9,10行替换如下: $HMENU = $DMENU = array('公司介绍', '供应产品', '采购清单', '新闻中心', '荣 ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(三) - 蛇定义
蛇是这个游戏的主角,要实现的功能也是最复杂的一个.因为蛇不止有属性,还有行为.它会动,还会吃东西,还会长大!而且还会死!这是很要命的.我一向看不懂复杂的代码,也写不出复杂的代码.所以对于蛇,我很纠结, ...
- 关于viewWithTag的一点说明
通常我们使用viewWithTag如下情形: 如果我们用了一个父View,上面放了多个子view, 每个子view都通过从0开始的Tag值来进行标志,以便于后期在像View上直接使用viewWithT ...
- java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils Caused by: java.lang.ClassNotFou ...
- wordpress显示多个分类的文章
显示多个分类下的文章可以这样提取: <?php query_posts(array('posts_per_page'=>10,'orderby'=>'rand','category_ ...
- 实现在线阅读pdf功能--php
在网上找了很久,想要实现一个在线阅读word,pdf文件的功能,网上的资料很多,但是提到真正怎么实现的比较少.现在我来简单说明一下,我实现的过程. 我现在只能实现在线阅读pdf(将word等转换成pd ...