• android-async-http框架之与网络进行数据交互


    (尊重劳动成果,转载请注明出处,谢谢。http://www.cnblogs.com/clear5/)

    其实android-async-http与网络数据的交互跟与服务器交互都非常简单和相似。

    主要用到两个类:

    com.loopj.android.http.BinaryHttpResponseHandler; //二进制流文件(图片,音乐,视频等)处理类
    com.loopj.android.http.TextHttpResponseHandler; //文本文件处理类

    下面开始贴代码,相关指示在注释里标注了。

    我这里使用的开发工具为Android Studio。

    首先是新建一个project,我这里叫AsyncimageDemo,然后注意导包:android-async-http-1.4.7.jar

    先把布局文件搭建好,修改activity_main.xml内容:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical">
     6    <!-- http://www.cnblogs.com/clear5/ -->  
     7     <LinearLayout
     8         android:id="@+id/btn_line"
     9         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"
    11         android:gravity="center"
    12         android:orientation="horizontal">
    13 
    14         <Button
    15             android:id="@+id/img_btn"
    16             android:layout_width="wrap_content"
    17             android:layout_height="wrap_content"
    18             android:text="点击获取网络图片"/>
    19         <Button
    20             android:id="@+id/web_btn"
    21             android:layout_width="wrap_content"
    22             android:layout_height="wrap_content"
    23             android:text="点击获取网页数据"/>
    24 
    25     </LinearLayout>
    26 
    27     <ImageView
    28         android:id="@+id/img_view"
    29         android:adjustViewBounds="true"
    30         android:layout_width="match_parent"
    31         android:layout_height="wrap_content" />
    32 
    33     <WebView
    34         android:id="@+id/web_view"
    35         android:layout_width="match_parent"
    36         android:layout_height="wrap_content"/>
    37 
    38 </LinearLayout>

    布局显示图如下:

    修改MainActivity.java文件内容:

      1 package com.app.asyncimagedemo;
      2 
      3 import android.app.Activity;
      4 import android.graphics.Bitmap;
      5 import android.graphics.BitmapFactory;
      6 import android.os.Bundle;
      7 
      8 import android.util.Log;
      9 import android.view.View;
     10 import android.view.Window;
     11 import android.webkit.WebView;
     12 import android.widget.Button;
     13 import android.widget.ImageView;
     14 import android.widget.Toast;
     15 
     16 import com.loopj.android.http.AsyncHttpClient;
     17 import com.loopj.android.http.BinaryHttpResponseHandler;
     18 import com.loopj.android.http.TextHttpResponseHandler;
     19 
     20 import org.apache.http.Header;
     21 
     22 /**
     23  * http://www.cnblogs.com/clear5/
     24  */
     25 public class MainActivity extends Activity {
     26 
     27     final static String TAG = MainActivity.class.getCanonicalName();
     28     //创建AsyncHttpClient对象
     29     private static AsyncHttpClient client = new AsyncHttpClient();
     30 
     31     private ImageView imageView;
     32     private WebView webView;
     33     private Button imgBtn;
     34     private Button webBtn;
     35 
     36     @Override
     37     protected void onCreate(Bundle savedInstanceState) {
     38         super.onCreate(savedInstanceState);
     39         requestWindowFeature(Window.FEATURE_NO_TITLE);
     40         setContentView(R.layout.activity_main);
     41 
     42         //加载布局控件对象
     43         imageView = (ImageView) findViewById(R.id.img_view);
     44         imgBtn = (Button) findViewById(R.id.img_btn);
     45 
     46         webView = (WebView) findViewById(R.id.web_view);
     47         webBtn = (Button) findViewById(R.id.web_btn);
     48 
     49         //图片地址
     50         final String imgUrl = "http://imgsrc.baidu.com/forum/pic/item/503d269759ee3d6dc4ee119543166d224f4ade40.jpg";
     51         //网页地址
     52         final String webUrl = "http://m.cnblogs.com/?u=clear5";
     53 
     54         //点击获取图片资源按钮事件
     55         imgBtn.setOnClickListener(new View.OnClickListener() {
     56             @Override
     57             public void onClick(View view) {
     58 
     59                 imageView.setVisibility(View.VISIBLE);//获取图片资源时,图片资源显示
     60                 webView.setVisibility(View.GONE);//获取图片资源时,网页资源隐藏
     61 
     62                 haveImg(imgUrl);
     63             }
     64         });
     65 
     66         //点击获取网页资源按钮事件
     67         webBtn.setOnClickListener(new View.OnClickListener() {
     68             @Override
     69             public void onClick(View view) {
     70 
     71                 imageView.setVisibility(View.GONE);//获取网页资源时,图片资源隐藏
     72                 webView.setVisibility(View.VISIBLE);//获取网页资源时,网页资源显示
     73 
     74                 haveWeb(webUrl);
     75             }
     76         });
     77     }
     78     //获取网页
     79     private void haveWeb(String webUrl) {
     80 
     81         client.get(webUrl, new TextHttpResponseHandler() {
     82             //获取失败
     83             @Override
     84             public void onFailure(int i, Header[] headers, String s, Throwable throwable) {
     85 
     86                 Log.d(TAG,throwable+"");
     87 
     88                 Toast.makeText(MainActivity.this,"对不起,读取失败……状态码为:"+i,Toast.LENGTH_LONG).show();
     89             }
     90             //获取成功
     91             @Override
     92             public void onSuccess(int i, Header[] headers, String s) {
     93 
     94                 webView.getSettings().setJavaScriptEnabled(true);//是否支持动态加载js
     95                 webView.getSettings().setDefaultTextEncodingName("UTF-8");//编码方式
     96                 //以下两行代码是使网页能够自适屏
     97                 webView.getSettings().setUseWideViewPort(true);
     98                 webView.getSettings().setLoadWithOverviewMode(true);
     99 
    100                 webView.loadData(s,"text/html;charset=UTF-8",null);//加载网页
    101             }
    102         });
    103     }
    104 
    105     //获取图片
    106     private void haveImg(String imgUrl) {
    107 
    108         client.get(imgUrl, new BinaryHttpResponseHandler() {//BinaryHttpResponseHandler是用来读取二进制文件(比如图片)的
    109             //成功
    110             @Override
    111             public void onSuccess(int i, Header[] headers, byte[] bytes) {
    112 
    113                 Bitmap b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);//解析图片
    114                 //将图片资源加载到ImageView控件中
    115                 imageView.setImageBitmap(b);
    116 
    117             }
    118             //失败
    119             @Override
    120             public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
    121 
    122                 Log.d(TAG,throwable+"");
    123 
    124                 Toast.makeText(MainActivity.this,"对不起,读取失败……状态码为:"+i,Toast.LENGTH_LONG).show();
    125 
    126             }
    127         });
    128     }
    129 
    130 
    131 }

    这样的话,我们就实现了android-async-http框架与网络交互数据的功能。当然还有一步重要的就是一定要在AndroidManifest.xml中加入获取网络权限的代码:

    <uses-permission android:name="android.permission.INTERNET"/>

    步骤都完成后,我们就可以运行程序看效果了。

    启动界面:

    点击获取图片资源按钮,获取图片加载到屏幕中:

    然后再点击获取网页数据按钮,获取到网页加载到屏幕:

    这样就完成了android-async-http与网络的数据交互,是不是很简单?



  • 相关阅读:
    Oracle trunc()函数的用法
    Python获取指定目录下文件名,及创建目录
    python复制文件并重命名
    python自动创建Excel,且文件名和内容从另一个Excel中自动获取
    pip命令提示unknow or unsupported command install解决方法及查看包方法
    今日份学习性能测试工具、瀑布图
    Oracle的NVL函数用法
    创建虚拟机过程
    Linux中使用 alias 来简化测试部分工作
    排序-冒泡-java
  • 原文地址:https://www.cnblogs.com/clear5/p/4568421.html
Copyright © 2020-2023  润新知