• Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)


    1. 前面提到Http的get/post方式  、 HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的

    2. Android应用会经常使用http协议进行传输,网上会有很完善开源框架,已经包装好了http的get/post,还有httpclient等等;这样我们开发周期也会缩短;

    3. 下面通过一个Android案例来进行,说明常用的Http框架

     在http://github.com/中搜索async http:

    这里发现明显第1个android-async-http更多用户使用,这里的loopj/android-async-http是比较常用的http框架

    4. 使用开源框架get方式提交数据:

    我们还是在之前的get的QQ登录案例进行讲解,我们将下载之后的loopj/android-async-http的源码代码文件复制到如下的工程中,效果如下:

    loopj/android-async-http的源码代码文件路径是:……android-async-http-masterlibrarysrcmainjava

    同时这里我已经不在需要之前的StreamTools工具类,因为这里的开源框架内部已经全部实现好了,接下来我们只需要修改MainActivity内部的代码如下

      1 package com.itheima.qqlogin;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.FileOutputStream;
      7 import java.io.InputStream;
      8 import java.io.InputStreamReader;
      9 import java.net.HttpURLConnection;
     10 import java.net.MalformedURLException;
     11 import java.net.URL;
     12 import java.net.URLEncoder;
     13 
     14 import org.apache.http.Header;
     15 
     16 import com.loopj.android.http.AsyncHttpClient;
     17 import com.loopj.android.http.AsyncHttpResponseHandler;
     18 
     19 import android.app.Activity;
     20 import android.os.Bundle;
     21 import android.text.TextUtils;
     22 import android.util.Log;
     23 import android.view.View;
     24 import android.widget.CheckBox;
     25 import android.widget.EditText;
     26 import android.widget.Toast;
     27 
     28 public class MainActivity extends Activity {
     29     private static final String Tag = "MainActivity";
     30     private EditText et_qq;
     31     private EditText et_pwd;
     32     private CheckBox cb_remember;
     33 
     34     @Override
     35     protected void onCreate(Bundle savedInstanceState) {
     36         super.onCreate(savedInstanceState);
     37         setContentView(R.layout.activity_main);
     38         //查询关心的控件
     39         et_qq = (EditText) findViewById(R.id.et_qq);
     40         et_pwd = (EditText) findViewById(R.id.et_pwd);
     41         cb_remember = (CheckBox) findViewById(R.id.cb_remember);
     42         Log.i(Tag,"oncreate 被调用");
     43         //完成数据的回显。
     44         readSavedData();
     45     }
     46     //读取保存的数据
     47     private void readSavedData() {
     48         // getFilesDir() == /data/data/包名/files/  获取文件的路径 一般系统是不会清理的。 用户手工清理,系统会有提示。
     49         // getCacheDir()==  /data/data/包名/cache/ 缓存文件的路径 当系统内存严重不足的时候 系统会自动的清除缓存 用户手工清理系统没有提示
     50         File file = new File(getFilesDir(),"info.txt");
     51         if(file.exists()&&file.length()>0){
     52             try {
     53                 //FileInputStream fis = new FileInputStream(file);
     54                 FileInputStream fis =this.openFileInput("info.txt");
     55                 BufferedReader br = new BufferedReader(new InputStreamReader(fis));
     56                 //214342###abcdef
     57                 String info = br.readLine();
     58                 String qq = info.split("###")[0];
     59                 String pwd = info.split("###")[1];
     60                 et_qq.setText(qq);
     61                 et_pwd.setText(pwd);
     62                 fis.close();
     63             } catch (Exception e) {
     64                 e.printStackTrace();
     65             }
     66         }
     67     }
     68     /**
     69      * 登陆按钮的点击事件,在点击事件里面获取数据
     70      * @param view
     71      */
     72     public void login(View view){
     73         final String qq = et_qq.getText().toString().trim();
     74         final String pwd = et_pwd.getText().toString().trim();
     75         if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){
     76             Toast.makeText(this, "qq号码或者密码不能为空", 0).show();
     77             return;
     78         }
     79         //判断用户是否勾选记住密码。
     80         if(cb_remember.isChecked()){
     81             //保存密码
     82             Log.i(Tag,"保存密码");
     83             try {
     84 //                File file = new File(getFilesDir(),"info.txt");
     85 //                FileOutputStream fos = new FileOutputStream(file);
     86                 FileOutputStream fos = this.openFileOutput("info.txt", 0);
     87                 //214342###abcdef
     88                 fos.write((qq+"###"+pwd).getBytes());
     89                 fos.close();
     90                 Toast.makeText(this, "保存成功", 0).show();
     91             } catch (Exception e) {
     92                 e.printStackTrace();
     93                 Toast.makeText(this, "保存失败", 0).show();
     94             }
     95         }else{
     96             //无需保存密码
     97             Log.i(Tag,"无需保存密码");
     98         }
     99         //登陆的操作,网络请求
    100         AsyncHttpClient client = new AsyncHttpClient();
    101         String url = getResources().getString(R.string.serverip)+"?qq="+URLEncoder.encode(qq)+"&password="+URLEncoder.encode(pwd);
    102         client.get(url, new AsyncHttpResponseHandler() {
    103             @Override
    104             public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
    105                 Toast.makeText(MainActivity.this, new String(responseBody), 0).show();
    106             }
    107             @Override
    108             public void onFailure(int statusCode, Header[] headers,
    109                     byte[] responseBody, Throwable error) {
    110                 Toast.makeText(MainActivity.this, new String(responseBody), 0).show();
    111             }
    112         });
    113     }
    114     
    115 }

     

    5. 同样的使用开源框架post方式提交数据:

    我们还是在之前的post的QQ登录案例进行讲解,我们将下载之后的loopj/android-async-http的源码代码文件复制到如下的工程中,和上面一样;接下来就是修改MainActivity.java代码,如下:

      1 package com.itheima.qqlogin;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.FileOutputStream;
      7 import java.io.InputStream;
      8 import java.io.InputStreamReader;
      9 import java.net.HttpURLConnection;
     10 import java.net.MalformedURLException;
     11 import java.net.URL;
     12 import java.net.URLEncoder;
     13 
     14 import org.apache.http.Header;
     15 
     16 import com.loopj.android.http.AsyncHttpClient;
     17 import com.loopj.android.http.AsyncHttpResponseHandler;
     18 import com.loopj.android.http.RequestParams;
     19 
     20 import android.app.Activity;
     21 import android.os.Bundle;
     22 import android.text.TextUtils;
     23 import android.util.Log;
     24 import android.view.View;
     25 import android.widget.CheckBox;
     26 import android.widget.EditText;
     27 import android.widget.Toast;
     28 
     29 public class MainActivity extends Activity {
     30     private static final String Tag = "MainActivity";
     31     private EditText et_qq;
     32     private EditText et_pwd;
     33     private CheckBox cb_remember;
     34 
     35     @Override
     36     protected void onCreate(Bundle savedInstanceState) {
     37         super.onCreate(savedInstanceState);
     38         setContentView(R.layout.activity_main);
     39         //查询关心的控件
     40         et_qq = (EditText) findViewById(R.id.et_qq);
     41         et_pwd = (EditText) findViewById(R.id.et_pwd);
     42         cb_remember = (CheckBox) findViewById(R.id.cb_remember);
     43         Log.i(Tag,"oncreate 被调用");
     44         //完成数据的回显。
     45         readSavedData();
     46     }
     47     //读取保存的数据
     48     private void readSavedData() {
     49         // getFilesDir() == /data/data/包名/files/  获取文件的路径 一般系统是不会清理的。 用户手工清理,系统会有提示。
     50         // getCacheDir()==  /data/data/包名/cache/ 缓存文件的路径 当系统内存严重不足的时候 系统会自动的清除缓存 用户手工清理系统没有提示
     51         File file = new File(getFilesDir(),"info.txt");
     52         if(file.exists()&&file.length()>0){
     53             try {
     54                 //FileInputStream fis = new FileInputStream(file);
     55                 FileInputStream fis =this.openFileInput("info.txt");
     56                 BufferedReader br = new BufferedReader(new InputStreamReader(fis));
     57                 //214342###abcdef
     58                 String info = br.readLine();
     59                 String qq = info.split("###")[0];
     60                 String pwd = info.split("###")[1];
     61                 et_qq.setText(qq);
     62                 et_pwd.setText(pwd);
     63                 fis.close();
     64             } catch (Exception e) {
     65                 e.printStackTrace();
     66             }
     67         }
     68     }
     69     /**
     70      * 登陆按钮的点击事件,在点击事件里面获取数据
     71      * @param view
     72      */
     73     public void login(View view){
     74         final String qq = et_qq.getText().toString().trim();
     75         final String pwd = et_pwd.getText().toString().trim();
     76         if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){
     77             Toast.makeText(this, "qq号码或者密码不能为空", 0).show();
     78             return;
     79         }
     80         //判断用户是否勾选记住密码。
     81         if(cb_remember.isChecked()){
     82             //保存密码
     83             Log.i(Tag,"保存密码");
     84             try {
     85 //                File file = new File(getFilesDir(),"info.txt");
     86 //                FileOutputStream fos = new FileOutputStream(file);
     87                 FileOutputStream fos = this.openFileOutput("info.txt", 0);
     88                 //214342###abcdef
     89                 fos.write((qq+"###"+pwd).getBytes());
     90                 fos.close();
     91                 Toast.makeText(this, "保存成功", 0).show();
     92             } catch (Exception e) {
     93                 e.printStackTrace();
     94                 Toast.makeText(this, "保存失败", 0).show();
     95             }
     96         }else{
     97             //无需保存密码
     98             Log.i(Tag,"无需保存密码");
     99         }
    100         //登陆的操作,网络请求
    101         AsyncHttpClient client = new AsyncHttpClient();
    102         String url = getResources().getString(R.string.serverip);
    103         RequestParams params = new RequestParams();
    104         params.put("qq", qq);
    105         params.put("password", pwd);
    106         client.post(url, params, new AsyncHttpResponseHandler() {
    107             @Override
    108             public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
    109                 Toast.makeText(MainActivity.this, new String(responseBody), 0).show();
    110             }
    111             
    112             @Override
    113             public void onFailure(int statusCode, Header[] headers,
    114                     byte[] responseBody, Throwable error) {
    115                 Toast.makeText(MainActivity.this, new String(responseBody), 0).show();
    116             }
    117         });
    118     }
    119     
    120 }

     

  • 相关阅读:
    Java实现第九届蓝桥杯螺旋折线
    Java实现第九届蓝桥杯递增三元组
    强大的Mockito测试框架
    搭建eclipse环境下 Nutch+Mysql 二次开发环境
    mysql操作查询结果case when then else end用法举例
    查看mysql数据库及表编码格式
    mysql如何更改character-set-server默认为latin1
    (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
    Ubuntu14连接MySql报错“can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock'”
    inux下设置mysql数据库字符集utf8
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4785026.html
Copyright © 2020-2023  润新知