Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)
2015-09-06 12:38
806 查看
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/[b]android-async-http是比较常用的http框架[/b]
4.使用开源框架get方式提交数据:
我们还是在之前的[b]get的QQ登录案例进行讲解,我们将下载之后的loopj/[b]android-async-http的源码代码文件复制到如下的工程中,效果如下:[/b][/b]
[b][b][b][b]loopj/[b]android-async-http的源码代码文件路径是:……\android-async-http-master\library\src\main\java[/b][/b][/b][/b][/b]
同时这里我已经不在需要之前的StreamTools工具类,因为这里的开源框架内部已经全部实现好了,接下来我们只需要修改MainActivity内部的代码如下:
5.同样的使用开源框架post方式提交数据:
[b]我们还是在之前的[b]post的QQ登录案例进行讲解,我们将下载之后的loopj/[b]android-async-http的源码代码文件复制到如下的工程中,和上面一样;接下来就是修改MainActivity.java代码,如下:[/b][/b][/b]
2.Android应用会经常使用http协议进行传输,网上会有很完善开源框架,已经包装好了http的get/post,还有httpclient等等;这样我们开发周期也会缩短;
3.下面通过一个Android案例来进行,说明常用的Http框架:
在http://github.com/中搜索async http:
这里发现明显第1个android-async-http更多用户使用,这里的loopj/[b]android-async-http是比较常用的http框架[/b]
4.使用开源框架get方式提交数据:
我们还是在之前的[b]get的QQ登录案例进行讲解,我们将下载之后的loopj/[b]android-async-http的源码代码文件复制到如下的工程中,效果如下:[/b][/b]
[b][b][b][b]loopj/[b]android-async-http的源码代码文件路径是:……\android-async-http-master\library\src\main\java[/b][/b][/b][/b][/b]
同时这里我已经不在需要之前的StreamTools工具类,因为这里的开源框架内部已经全部实现好了,接下来我们只需要修改MainActivity内部的代码如下:
package com.itheima.qqlogin; 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.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import org.apache.http.Header; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; 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,"无需保存密码"); } //登陆的操作,网络请求 AsyncHttpClient client = new AsyncHttpClient(); String url = getResources().getString(R.string.serverip)+"?qq="+URLEncoder.encode(qq)+"&password="+URLEncoder.encode(pwd); client.get(url, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { Toast.makeText(MainActivity.this, new String(responseBody), 0).show(); } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { Toast.makeText(MainActivity.this, new String(responseBody), 0).show(); } }); } }
5.同样的使用开源框架post方式提交数据:
[b]我们还是在之前的[b]post的QQ登录案例进行讲解,我们将下载之后的loopj/[b]android-async-http的源码代码文件复制到如下的工程中,和上面一样;接下来就是修改MainActivity.java代码,如下:[/b][/b][/b]
package com.itheima.qqlogin; 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.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import org.apache.http.Header; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; 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,"无需保存密码"); } //登陆的操作,网络请求 AsyncHttpClient client = new AsyncHttpClient(); String url = getResources().getString(R.string.serverip); RequestParams params = new RequestParams(); params.put("qq", qq); params.put("password", pwd); client.post(url, params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { Toast.makeText(MainActivity.this, new String(responseBody), 0).show(); } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { Toast.makeText(MainActivity.this, new String(responseBody), 0).show(); } }); } }
相关文章推荐
- Android之旅:梦想、学习、坚持、自信、淡定
- Android性能测试小工具Emmagee
- 谈谈Android Material Design 中的Tint(着色)
- 查看Android 4.4的源码
- Android UI之ImageView实现图片旋转和缩放
- Android系统的Root权限获取与检测
- 【转】Android之apk文件签名——keytool 和 jarsigner
- Android M 新的运行时权限开发者需要知道的一切
- Android系统的Root权限获取与检测
- Android --LoginActivity模板登录
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
- Android实现图片反转、翻转、旋转、放大和缩小
- Android开发者必知的杂志周刊
- Android Notification通知详细解释
- Android开发之获取相册照片和获取拍照照片
- [转]Android中px dpi dip density densityDpi 的相关说明
- android:configChanges对Activity生命周期的影响
- Android官-按百分比来设置控件的宽高
- android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明
- android中的Filter接口简介