1.Apache -Httpclient

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。(类比推理MySQL数据库客户端)

代码模拟浏览器的行为
             (1)打开浏览器
             (2)输入数据
             (3)敲回车
 
2.Httpclient使用GET方式提交数据:
在GET方式下使用HttpClient需要几个最基本步骤。

(1)构造HttpClient的实例。

(2)创建连接方法的实例,这里是HttpGet,在HttpGet的构造方法里面传入待连接的路径。

(3)请求HttpClient,调用execute传入HttPGet取得HttpResponse。

(4)读HttpResponse ,在读之前判断连接状态是否等于HttpStatus.SC_OK(200)。

(5)对读取的内容进行处理。

 
其中MainActivity.java:
 package com.himi.post;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String Tag = "MainActivity";
private EditText et_qq;
private EditText et_pwd;
private CheckBox cb_remember;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查询关心的控件
et_qq = (EditText) findViewById(R.id.et_qq);
et_pwd = (EditText) findViewById(R.id.et_pwd);
cb_remember = (CheckBox) findViewById(R.id.cb_remember);
Log.i(Tag,"oncreate 被调用");
//完成数据的回显。
readSavedData();
}
//读取保存的数据
private void readSavedData() {
// getFilesDir() == /data/data/包名/files/ 获取文件的路径 一般系统是不会清理的。 用户手工清理,系统会有提示。
// getCacheDir()== /data/data/包名/cache/ 缓存文件的路径 当系统内存严重不足的时候 系统会自动的清除缓存 用户手工清理系统没有提示
File file = new File(getFilesDir(),"info.txt");
if(file.exists()&&file.length()>0){
try {
//FileInputStream fis = new FileInputStream(file);
FileInputStream fis =this.openFileInput("info.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
//214342###abcdef
String info = br.readLine();
String qq = info.split("###")[0];
String pwd = info.split("###")[1];
et_qq.setText(qq);
et_pwd.setText(pwd);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 登陆按钮的点击事件,在点击事件里面获取数据
* @param view
*/
public void login(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){
Toast.makeText(this, "qq号码或者密码不能为空", 0).show();
return;
}
//判断用户是否勾选记住密码。
if(cb_remember.isChecked()){
//保存密码
Log.i(Tag,"保存密码");
try {
// File file = new File(getFilesDir(),"info.txt");
// FileOutputStream fos = new FileOutputStream(file);
FileOutputStream fos = this.openFileOutput("info.txt", 0);
//214342###abcdef
fos.write((qq+"###"+pwd).getBytes());
fos.close();
Toast.makeText(this, "保存成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "保存失败", 0).show();
}
}else{
//无需保存密码
Log.i(Tag,"无需保存密码");
} //登录的操作,网络的请求
new Thread() {
public void run() {
//String path = "http://localhost:8080/web/LoginServlet";这里不能写成localhost
try {
//httpclient get请求提交数据
String path = getString(R.string.serverip)+"?qq="+qq+"&password="+pwd;
//1.打开浏览器
HttpClient client = new DefaultHttpClient();
//2.输入地址
HttpGet httpGet = new HttpGet(path);
//3.敲回车
HttpResponse response = client.execute(httpGet);
int code = response.getStatusLine().getStatusCode();
if(code == 200) {
InputStream is = response.getEntity().getContent();
String result = StreamTools.readStream(is);
showToastInAnyThread(result);
}else {
showToastInAnyThread("请求失败,返回码是:"+code);
} } catch (Exception e) {
e.printStackTrace();
showToastInAnyThread("请求失败");
}
};
}.start(); } /**
* 显示土司 在主线程更新UI
* @param text
*/
public void showToastInAnyThread(final String text) {
runOnUiThread(new Runnable() { public void run() {
Toast.makeText(MainActivity.this, text, 0).show(); }
});
}
}

这里的工具类StreamTools和前面一样的,布局文件也是和前面一样的;这里的效果演示和之前的笔记209和笔记210是一样,这里不再重复。

3.Httpclient使用POST方式提交数据:

在POST方式下使用HttpClient需要几个最基本步骤。

(1)构造HttpClient的实例。

(2)创建连接方法的实例,这里是HttpPost,在HttpPost的构造方法里面传入待连接的路径。

(3)请求HttpClient,调用execute传入HttPGet取得HttpResponse。

(4)读HttpResponse ,在读之前判断连接状态是否等于HttpStatus.SC_OK(200)。

(5)对读取的内容进行处理。

其中MainActivity.java:

 package com.himi.post;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
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.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String Tag = "MainActivity";
private EditText et_qq;
private EditText et_pwd;
private CheckBox cb_remember;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查询关心的控件
et_qq = (EditText) findViewById(R.id.et_qq);
et_pwd = (EditText) findViewById(R.id.et_pwd);
cb_remember = (CheckBox) findViewById(R.id.cb_remember);
Log.i(Tag,"oncreate 被调用");
//完成数据的回显。
readSavedData();
}
//读取保存的数据
private void readSavedData() {
// getFilesDir() == /data/data/包名/files/ 获取文件的路径 一般系统是不会清理的。 用户手工清理,系统会有提示。
// getCacheDir()== /data/data/包名/cache/ 缓存文件的路径 当系统内存严重不足的时候 系统会自动的清除缓存 用户手工清理系统没有提示
File file = new File(getFilesDir(),"info.txt");
if(file.exists()&&file.length()>0){
try {
//FileInputStream fis = new FileInputStream(file);
FileInputStream fis =this.openFileInput("info.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
//214342###abcdef
String info = br.readLine();
String qq = info.split("###")[0];
String pwd = info.split("###")[1];
et_qq.setText(qq);
et_pwd.setText(pwd);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 登陆按钮的点击事件,在点击事件里面获取数据
* @param view
*/
public void login(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){
Toast.makeText(this, "qq号码或者密码不能为空", 0).show();
return;
}
//判断用户是否勾选记住密码。
if(cb_remember.isChecked()){
//保存密码
Log.i(Tag,"保存密码");
try {
// File file = new File(getFilesDir(),"info.txt");
// FileOutputStream fos = new FileOutputStream(file);
FileOutputStream fos = this.openFileOutput("info.txt", 0);
//214342###abcdef
fos.write((qq+"###"+pwd).getBytes());
fos.close();
Toast.makeText(this, "保存成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "保存失败", 0).show();
}
}else{
//无需保存密码
Log.i(Tag,"无需保存密码");
} //登录的操作,网络的请求
new Thread() {
public void run() {
//post请求提交数据
//String path = "http://localhost:8080/web/LoginServlet";这里不能写成localhost
try {
String path = getString(R.string.serverip);
//1.打开浏览器
HttpClient client = new DefaultHttpClient();
//2.输入地址
HttpPost httpPost = new HttpPost(path);
//设置一个url的表单的数据
List<NameValuePair> paramters = new ArrayList<NameValuePair>();
paramters.add(new BasicNameValuePair("qq", qq));
paramters.add(new BasicNameValuePair("password", pwd));
httpPost.setEntity(new UrlEncodedFormEntity(paramters));
//3.敲回车
HttpResponse response = client.execute(httpPost);
int code = response.getStatusLine().getStatusCode();
if(code == 200) {
InputStream is = response.getEntity().getContent();
String result = StreamTools.readStream(is);
showToastInAnyThread(result);
}else {
showToastInAnyThread("请求失败,返回码是:"+code);
} } catch (Exception e) {
e.printStackTrace();
showToastInAnyThread("请求失败");
}
};
}.start(); } /**
* 显示土司 在主线程更新UI
* @param text
*/
public void showToastInAnyThread(final String text) {
runOnUiThread(new Runnable() { public void run() {
Toast.makeText(MainActivity.this, text, 0).show(); }
});
}
}

这里的工具类StreamTools和前面一样的,布局文件也是和前面一样的;这里的效果演示和之前的笔记209和笔记210是一样,这里不再重复。

最新文章

  1. Sqlserver中 登录用户只能看到自己拥有权限的库
  2. 使用arm开发板搭建无线mesh网络(二)
  3. 【总结】教你怎么将centos7打造成桌面系统
  4. cookie的存值和取值方式
  5. Javascript 常用函数【2】
  6. javascript 实现jsonp
  7. HTML中Id和Name的区别
  8. 【转】关于MySQL函数GROUP_CONCAT的使用
  9. java程序的工作原理
  10. HTML 使用jQuery选中复选框 简易版
  11. Chrome浏览器Postman插件安装使用
  12. Docker私有仓库实例
  13. 开发工具IntelliJ IDEA的安装与操作
  14. Java ee第六周作业
  15. 20150401 作业2 结对 四则运算ver 1.0
  16. itexpdf同一个段落不同文字,如何设置不同的格式
  17. 【版本管理】自定义git
  18. oozie java api提交作业
  19. 《转》Python学习(18)-python函数(二)
  20. Java学习--javabean

热门文章

  1. 基于XML的AOP配置
  2. ASP.NET控件之RegularExpressValidator控件
  3. hdu1695(莫比乌斯反演模板)
  4. Jmeter3.2源码编译环境搭建(转)
  5. css3中的变形(transform)、过渡(transtion)、动画(animation)
  6. C. Destroying Array 并查集,逆向思维
  7. Unity C# 运用 GetSaveFileName() 导出Excel文件
  8. node官方docker镜像运行bower 提示 permission denied 解决方法
  9. vue3.0学习笔记(一)
  10. 从零开始的全栈工程师——js篇2.17(属性和节点获取)