码迷,mamicode.com
首页 > 移动开发 > 详细

Android(java)学习笔记211:采用httpclient提交数据(qq登录案例)

时间:2015-09-06 09:46:45      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

1.Apache -Httpclient

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

代码模拟浏览器的行为
             (1)打开浏览器
             (2)输入数据
             (3)敲回车
 
2.Httpclient使用GET方式提交数据
其中MainActivity.java:
  1 package com.himi.post;
  2 import java.io.BufferedReader;
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileOutputStream;
  6 import java.io.InputStream;
  7 import java.io.InputStreamReader;
  8 import org.apache.http.HttpResponse;
  9 import org.apache.http.client.HttpClient;
 10 import org.apache.http.client.methods.HttpGet;
 11 import org.apache.http.impl.client.DefaultHttpClient;
 12 import android.app.Activity;
 13 import android.os.Bundle;
 14 import android.text.TextUtils;
 15 import android.util.Log;
 16 import android.view.View;
 17 import android.widget.CheckBox;
 18 import android.widget.EditText;
 19 import android.widget.Toast;
 20 public class MainActivity extends Activity {
 21     private static final String Tag = "MainActivity";
 22     private EditText et_qq;
 23     private EditText et_pwd;
 24     private CheckBox cb_remember;
 25     @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27         super.onCreate(savedInstanceState);
 28         setContentView(R.layout.activity_main);
 29         //查询关心的控件
 30         et_qq = (EditText) findViewById(R.id.et_qq);
 31         et_pwd = (EditText) findViewById(R.id.et_pwd);
 32         cb_remember = (CheckBox) findViewById(R.id.cb_remember);
 33         Log.i(Tag,"oncreate 被调用");
 34         //完成数据的回显。
 35         readSavedData();
 36     }
 37     //读取保存的数据
 38     private void readSavedData() {
 39         // getFilesDir() == /data/data/包名/files/  获取文件的路径 一般系统是不会清理的。 用户手工清理,系统会有提示。
 40         // getCacheDir()==  /data/data/包名/cache/ 缓存文件的路径 当系统内存严重不足的时候 系统会自动的清除缓存 用户手工清理系统没有提示
 41         File file = new File(getFilesDir(),"info.txt");
 42         if(file.exists()&&file.length()>0){
 43             try {
 44                 //FileInputStream fis = new FileInputStream(file);
 45                 FileInputStream fis =this.openFileInput("info.txt");
 46                 BufferedReader br = new BufferedReader(new InputStreamReader(fis));
 47                 //214342###abcdef
 48                 String info = br.readLine();
 49                 String qq = info.split("###")[0];
 50                 String pwd = info.split("###")[1];
 51                 et_qq.setText(qq);
 52                 et_pwd.setText(pwd);
 53                 fis.close();
 54             } catch (Exception e) {
 55                 e.printStackTrace();
 56             }
 57         }
 58     }
 59     /**
 60      * 登陆按钮的点击事件,在点击事件里面获取数据
 61      * @param view
 62      */
 63     public void login(View view){
 64         final String qq = et_qq.getText().toString().trim();
 65         final String pwd = et_pwd.getText().toString().trim();
 66         if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){
 67             Toast.makeText(this, "qq号码或者密码不能为空", 0).show();
 68             return;
 69         }
 70         //判断用户是否勾选记住密码。
 71         if(cb_remember.isChecked()){
 72             //保存密码
 73             Log.i(Tag,"保存密码");
 74             try {
 75 //                File file = new File(getFilesDir(),"info.txt");
 76 //                FileOutputStream fos = new FileOutputStream(file);
 77                 FileOutputStream fos = this.openFileOutput("info.txt", 0);
 78                 //214342###abcdef
 79                 fos.write((qq+"###"+pwd).getBytes());
 80                 fos.close();
 81                 Toast.makeText(this, "保存成功", 0).show();
 82             } catch (Exception e) {
 83                 e.printStackTrace();
 84                 Toast.makeText(this, "保存失败", 0).show();
 85             }
 86         }else{
 87             //无需保存密码
 88             Log.i(Tag,"无需保存密码");
 89         }
 90         
 91         //登录的操作,网络的请求
 92         new Thread() {
 93             public void run() {
 94                 //String path = "http://localhost:8080/web/LoginServlet";这里不能写成localhost
 95                 try {
 96                     //httpclient get请求提交数据
 97                     String path = getString(R.string.serverip)+"?qq="+qq+"&password="+pwd;
 98                     //1.打开浏览器
 99                     HttpClient client = new DefaultHttpClient();
100                     //2.输入地址
101                     HttpGet httpGet = new HttpGet(path);
102                     //3.敲回车
103                     HttpResponse response = client.execute(httpGet);
104                     int code = response.getStatusLine().getStatusCode();
105                     if(code == 200) {
106                         InputStream is = response.getEntity().getContent();
107                         String result = StreamTools.readStream(is);
108                         showToastInAnyThread(result);
109                     }else {
110                         showToastInAnyThread("请求失败,返回码是:"+code);
111                     }
112                     
113                     
114                 } catch (Exception e) {
115                     e.printStackTrace();
116                     showToastInAnyThread("请求失败");
117                 }
118             };
119         }.start();
120         
121     }
122     
123     /**
124      * 显示土司 在主线程更新UI
125      * @param text
126      */
127     public void showToastInAnyThread(final String text) {
128         runOnUiThread(new Runnable() {
129             
130             public void run() {
131                 Toast.makeText(MainActivity.this, text, 0).show();
132                 
133             }
134         });
135     }
136 }

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

 

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

其中MainActivity.java:

  1 package com.himi.post;
  2 import java.io.BufferedReader;
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileOutputStream;
  6 import java.io.InputStream;
  7 import java.io.InputStreamReader;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10 import org.apache.http.HttpResponse;
 11 import org.apache.http.NameValuePair;
 12 import org.apache.http.client.HttpClient;
 13 import org.apache.http.client.entity.UrlEncodedFormEntity;
 14 import org.apache.http.client.methods.HttpPost;
 15 import org.apache.http.impl.client.DefaultHttpClient;
 16 import org.apache.http.message.BasicNameValuePair;
 17 import android.app.Activity;
 18 import android.os.Bundle;
 19 import android.text.TextUtils;
 20 import android.util.Log;
 21 import android.view.View;
 22 import android.widget.CheckBox;
 23 import android.widget.EditText;
 24 import android.widget.Toast;
 25 public class MainActivity extends Activity {
 26     private static final String Tag = "MainActivity";
 27     private EditText et_qq;
 28     private EditText et_pwd;
 29     private CheckBox cb_remember;
 30     @Override
 31     protected void onCreate(Bundle savedInstanceState) {
 32         super.onCreate(savedInstanceState);
 33         setContentView(R.layout.activity_main);
 34         //查询关心的控件
 35         et_qq = (EditText) findViewById(R.id.et_qq);
 36         et_pwd = (EditText) findViewById(R.id.et_pwd);
 37         cb_remember = (CheckBox) findViewById(R.id.cb_remember);
 38         Log.i(Tag,"oncreate 被调用");
 39         //完成数据的回显。
 40         readSavedData();
 41     }
 42     //读取保存的数据
 43     private void readSavedData() {
 44         // getFilesDir() == /data/data/包名/files/  获取文件的路径 一般系统是不会清理的。 用户手工清理,系统会有提示。
 45         // getCacheDir()==  /data/data/包名/cache/ 缓存文件的路径 当系统内存严重不足的时候 系统会自动的清除缓存 用户手工清理系统没有提示
 46         File file = new File(getFilesDir(),"info.txt");
 47         if(file.exists()&&file.length()>0){
 48             try {
 49                 //FileInputStream fis = new FileInputStream(file);
 50                 FileInputStream fis =this.openFileInput("info.txt");
 51                 BufferedReader br = new BufferedReader(new InputStreamReader(fis));
 52                 //214342###abcdef
 53                 String info = br.readLine();
 54                 String qq = info.split("###")[0];
 55                 String pwd = info.split("###")[1];
 56                 et_qq.setText(qq);
 57                 et_pwd.setText(pwd);
 58                 fis.close();
 59             } catch (Exception e) {
 60                 e.printStackTrace();
 61             }
 62         }
 63     }
 64     /**
 65      * 登陆按钮的点击事件,在点击事件里面获取数据
 66      * @param view
 67      */
 68     public void login(View view){
 69         final String qq = et_qq.getText().toString().trim();
 70         final String pwd = et_pwd.getText().toString().trim();
 71         if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){
 72             Toast.makeText(this, "qq号码或者密码不能为空", 0).show();
 73             return;
 74         }
 75         //判断用户是否勾选记住密码。
 76         if(cb_remember.isChecked()){
 77             //保存密码
 78             Log.i(Tag,"保存密码");
 79             try {
 80 //                File file = new File(getFilesDir(),"info.txt");
 81 //                FileOutputStream fos = new FileOutputStream(file);
 82                 FileOutputStream fos = this.openFileOutput("info.txt", 0);
 83                 //214342###abcdef
 84                 fos.write((qq+"###"+pwd).getBytes());
 85                 fos.close();
 86                 Toast.makeText(this, "保存成功", 0).show();
 87             } catch (Exception e) {
 88                 e.printStackTrace();
 89                 Toast.makeText(this, "保存失败", 0).show();
 90             }
 91         }else{
 92             //无需保存密码
 93             Log.i(Tag,"无需保存密码");
 94         }
 95         
 96         //登录的操作,网络的请求
 97         new Thread() {
 98             public void run() {
 99                 //post请求提交数据
100                 //String path = "http://localhost:8080/web/LoginServlet";这里不能写成localhost
101                 try {
102                     String path = getString(R.string.serverip);
103                     //1.打开浏览器
104                     HttpClient client = new DefaultHttpClient();
105                     //2.输入地址
106                     HttpPost httpPost = new HttpPost(path);
107                     //设置一个url的表单的数据
108                     List<NameValuePair> paramters = new ArrayList<NameValuePair>();
109                     paramters.add(new BasicNameValuePair("qq", qq));
110                     paramters.add(new BasicNameValuePair("password", pwd));
111                     httpPost.setEntity(new UrlEncodedFormEntity(paramters));
112                     //3.敲回车
113                     HttpResponse response = client.execute(httpPost);
114                     int code = response.getStatusLine().getStatusCode();
115                     if(code == 200) {
116                         InputStream is = response.getEntity().getContent();
117                         String result = StreamTools.readStream(is);
118                         showToastInAnyThread(result);
119                     }else {
120                         showToastInAnyThread("请求失败,返回码是:"+code);
121                     }
122                     
123                 } catch (Exception e) {
124                     e.printStackTrace();
125                     showToastInAnyThread("请求失败");
126                 }
127             };
128         }.start();
129         
130     }
131     
132     /**
133      * 显示土司 在主线程更新UI
134      * @param text
135      */
136     public void showToastInAnyThread(final String text) {
137         runOnUiThread(new Runnable() {
138             
139             public void run() {
140                 Toast.makeText(MainActivity.this, text, 0).show();
141                 
142             }
143         });
144     }
145 }

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

Android(java)学习笔记211:采用httpclient提交数据(qq登录案例)

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4784470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!