Android之使用Android-query框架开发实战(二)

在上篇文章跟大家介绍了Android之使用Android-query框架开发实战(一),本文继续跟大家介绍有关Android-query框架。具体内容请看下文。

异步网络:

1. 添加权限:<uses-permission android:name="android.permission.INTERNET" />

2. 支持的类型

JSONObject
JSONArray
String (HTML, XML)
XmlDom (XML parsing)
XmlPullParser (Large XML files)
byte array
User defined custom type (Transformer)
Bitmap

3. 以Json数据为例,注意,红色部分是随你请求的数据类型一起改变

String url = "http://www.google.com/uds/GnewsSearch?q=Obama&v=1.0";
  aq.ajax(url, JSONObject.class, new AjaxCallback<JSONObject>() {
    @Override
    public void callback(String url, JSONObject json, AjaxStatus status) {
      if(json != null){
        //successful ajax call, show status code and json content
        Toast.makeText(aq.getContext(), status.getCode() + ":" + json.toString(), Toast.LENGTH_LONG).show();
      }else{
        //ajax error, show error code
        Toast.makeText(aq.getContext(), "Error:" + status.getCode(), Toast.LENGTH_LONG).show();
      }
    }
 }); 

上面的形式也可以写成下面一样,他们是无条件对等

public void asyncJson(){
  //perform a Google search in just a few lines of code
  String url = "http://www.google.com/uds/GnewsSearch?q=Obama&v=1.0";
  aq.ajax(url, JSONObject.class, this, "jsonCallback");
}
public void jsonCallback(String url, JSONObject json, AjaxStatus status){

  if(json != null){
    //successful ajax call
  }else{
    //ajax error
  }
} 

再举一个使用AQuery的XmlDom解析xml的例子,如果XML过大,使用XMLPullParser

public void xml_ajax(){
  String url = "https://picasaweb.google.com/data/feed/base/featured?max-results=8";
  aq.ajax(url, XmlDom.class, this, "picasaCb");
}
public void picasaCb(String url, XmlDom xml, AjaxStatus status){
 // 返回一系列为entry的结点,并把其add进list
  List<XmlDom> entries = xml.tags("entry");
  List<String> titles = new ArrayList<String>();

  String imageUrl = null;

  for(XmlDom entry: entries){
    titles.add(entry.text("title")); //循环把第一个结点为title的文本放进title
    imageUrl = entry.tag("content", "type", "image/jpeg").attr("src");//把第一个结点为content,属性为type,属性值为image/jpeg的src属性值赋予给imageUri
  }

  aq.id(R.id.image).image(imageUrl);
}   

4. 如果你想指定保存文件的位置,使用download方法

String url = "https://picasaweb.google.com/data/feed/base/featured?max-results=16";
File ext = Environment.getExternalStorageDirectory();
File target = new File(ext, "aquery/myfolder/photos.xml");    

aq.progress(R.id.progress).download(url, target, new AjaxCallback<File>(){

  public void callback(String url, File file, AjaxStatus status) {

    if(file != null){
      showResult("File:" + file.length() + ":" + file, status);
    }else{
      showResult("Failed", status);
    }
  }
 });

5. 自定义类型(文档例子是gson数据使用对象解析),详细见文档

6. 使用Http Post (Multiple)

private void aync_multipart(){
  String url = "https://graph.facebook.com/me/photos";
  Map<String, Object> params = new HashMap<String, Object>();
  params.put("message", "Message");
  //Simply put a byte[] to the params, AQuery will detect it and treat it as a multi-part post
  byte[] data = getImageData();
  params.put("source", data);
  //Alternatively, put a File or InputStream instead of byte[]
  //File file = getImageFile();
  //params.put("source", file);
  AQuery aq = new AQuery(getApplicationContext());
  aq.auth(handle).ajax(url, params, JSONObject.class, this, "photoCb");
}

7. 使用ajax是很容易达到缓存的

String url = "http://www.google.com";
// 返回最近15分钟内的缓存副本,如果expire为-1,内容将会立即更新且缓存
long expire = 15 * 60 * 1000;
aq.ajax(url, String.class, expire, new AjaxCallback<String>() {
 @Override
 public void callback(String url, String html, AjaxStatus status) {
  showResult(html);
 }
});

8. 使缓存无效

public void callback(String url, JSONObject json, AjaxStatus status) {

  if(json != null){
    if("1".equals(json.optString("status"))){
      //do something
    }else{
      // 不缓存
      status.invalidate();
    }
  }
}

9. 同步调用:如果ajax调用是在新开的线程,sync方法能够阻塞线程,直到ajax调用完毕,如果sync方法用在主线程将会引起Exception

String url = "http://www.google.com/uds/GnewsSearch?q=Obama&v=1.0";
AjaxCallback<JSONObject> cb = new AjaxCallback<JSONObject>();
cb.url(url).type(JSONObject.class);
aq.sync(cb);
JSONObject jo = cb.getResult();
AjaxStatus status = cb.getStatus();

以上就是小小编跟大家就介绍的Android之使用Android-query框架开发实战(二),希望大家喜欢。

时间: 2015-10-05

简略分析Android的Retrofit应用开发框架源码

面对一个项目,对于Android应用开发框架的选择,我想过三种方案: 1.使用Loader + HttpClient + GreenDao + Gson + Fragment,优点是可定制性强,由于使用Google家自己的Loader和LoaderManager,代码健壮性强. 缺点是整套代码学习成本较高,使用过程中样板代码较多,(比如每一个Request都需要产生一个新类) 2.Volley,作为Google在IO大会上得瑟过的一个网络库,其实不算什么新东西(2013 IO发布),使用较为简单

Android通用流行框架大全【整理】

Android通用流行框架大全 1. 缓存 DiskLruCacheJava实现基于LRU的磁盘缓存 2.图片加载 Android Universal Image Loader一个强大的加载,缓存,展示图片的库Picasso一个强大的图片下载与缓存的库Fresco一个用于管理图像和他们使用的内存的库Glide一个图片加载和缓存的库 3. 图片处理 Picasso-transformations一个为Picasso提供多种图片变换的库Glide-transformations一个为Glide提供多

Android Retrofit 2.0框架上传图片解决方案

本文为大家分享了 Android Retrofit 2.0框架上传图片解决方案,具体内容如下 1.单张图片的上传 /** * 上传一张图片 * @param description * @param imgs * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file\&qu

Android AndBase框架使用封装好的函数完成Http请求(三)

本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现有参Http Get请求... AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架..楼

举例讲解Android应用开发中OTTO框架的基本使用

OTTO是一个EventBus类型的事件传输总线,它可以提供"存储转发"的功能,让你APP中各个组件的交流更加便利,让你的程序分层更加清晰. 使用场景 OTTO基于Observer设计模式.它有发布者,订阅者这两个主要对象.OTTO的最佳实践就是通过反射牺牲了微小的性能,同时极大的提高了程序的耦合度,更加利于MVP分工开发与维护.业务层开发者在处理资源(比如Db, REST等)后并发布消息,展示层开发者(比如Activity/Fragment)就可以处理消息,而不用关心数据是怎么来的(

六款值得推荐的android(安卓)开源框架简介

1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-asyn

Android中XUtils3框架使用方法详解(一)

xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8) 今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的API语法进行的演示.相信大家对这个框架也都了解过, 下面简单介绍下XUtils3的一些基本知识. XUtils3一共有4大功能:注解模块,网络

Android学习之Flux架构入门

Flux 架构介绍 Flux 架构 被Facebook使用来构建他们的客户端web应用.跟Clean Architecture一样,它不是为移动应用设计的,但是它的特性和简单可以让我们很好的在安卓项目中采用. Flux模式最大的特点是单向的数据流,它的UI状态更新模式继承了MVC模式的设计思想.Flux并不是具体的框架,而是一套处理UI问题的模式,Android Flux同样不是具体的框架,你不需要导入或者集成任何新的代码就可以使用,而你需要做的事情是了解这套思想.遵循这种开发模式,查看我们提供

Android最基本的异步网络请求框架

本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关知识.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家. 1. 同步网络请求 以HTTP的GET请求为例,我们来介绍一下Android中一个基本的同步请求框架的实现.直接贴代码: public class HttpUtils { public static byte[] get(String urlString) { HttpURLConnection urlConnec

Android 网络请求框架Volley实例详解

Android 网络请求框架Volley实例详解 首先上效果图 Logcat日志信息on Reponse Volley特别适合数据量不大但是通信频繁的场景,像文件上传下载不适合! 首先第一步 用到的RequetQueue RequestQueue.Java RequestQueue请求队列首先得先说一下,ReuqestQueue是如何对请求进行管理的...RequestQueue是对所有的请求进行保存...然后通过自身的start()方法开启一个CacheDispatcher线程用于缓存调度,开

Flutter 网络请求框架封装详解

 Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient.第三方网络请求 http以及 Flutter 中的 Dio.我们可以比较一下这三种网络请求方式,然后封装为我们方便请求网络的工具类. Dart 原生的网络请求 HttpClient 实现 Dart 获取网络数据的请求,一般我们需要以下几个步骤: step 1: 原生的网络请求时不需要修改 pubspec.yaml 文件的,我们只需要在使用的地方引入所需包就可以了 i

IOS开发中异步网络请求上实现同步逻辑

IOS开发中异步网络请求上实现同步逻辑 前提: 可能遇到一些问题,比如上传多个数据,需要等多个数据上传成功后做一定的处理,而且一个个上传,万一哪个上传失败了,后面就不需要上传了,直接报错. 之前ASI的网络库中是有同步请求的接口,所以很好处理,AFNetwork的网络库只有异步的网络请求,该怎么实现呢? 1.循环异步拼组 - (void)uploadFile:(NSArray *)imageArray atIndex:(NSInteger)index imagesCount:(NSInteger

Android Retrofit和Rxjava的网络请求

Android  Retrofit和Rxjava的网络请求 去年的时候好多公司就已经使用Rxjava和Retrofit了,最近自自己学习了一下,感觉真的是很好用,让自己的网络请求变得更简单了,而且封装性极强. 首先做一下准备工作,导入需要引用的文件 compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' compile 'io.reactivex:rxjava:1.1.0' compile

Android网络请求框架Retrofit详解

介绍: Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求.本文使用Retrofit2.0.0版本进行实例演示. 使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式. 同步请求:需要在子线程中完成,会阻塞主线程. Response response = call.execute().body(); 异步请求:请

IOS网络请求之NSURLSession使用详解

前言: 无论是Android还是ios都离不开与服务器交互,这就必须用到网络请求,记得在2013年做iOS的时候那时候用的ASIHTTPRequest框架,现在重新捡起iOS的时候ASIHTTPRequest已经停止维护,大家都在用AFNetWorking作为首选网络请求框架,之前的ASIHTTPRequest是基于NSURLConnection类实现的,早期的AFNetWorking也是基于NSURLConnection实现,后来iOS9 之后已经放弃了NSURLConnection,开始使用

Kotlin结合Rxjava+Retrofit实现极简网络请求的方法

前言 因为最近正在写的项目集成了两个网络请求框架(Volley and Retrofit)对比之下也是选择了Retrofit.既然选择那自然要让自己以后开发更加省力(就是懒).于是我在Retrofit中加入了Rxjava,这也是当下蛮流行的一个请求框架.然后又利用了Kotlin的一些新特性,使网络请求变得特别简单,代码量特别少. Kotlin镇楼 RxJava RxJava学习是一个曲折漫长的过程,但一旦掌握,妙用无穷. 通过这里了解更多:http://www.jb51.net/article/

RxJava+Retrofit实现网络请求封装的方法

简要介绍 Retrofit是当前应用非常广泛的网络请求框架,通常结合RxJava来进行网络请求,本文将展示一个采用RxJava+Retrofit的网络请求demo. 集成步骤 1.app工程的build.gradle中添加依赖 //retrofit2 implementation 'com.google.code.gson:gson:2.8.5' implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.

Android HTTP网络请求的异步实现

前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理.所有网络数据发送,数据接收都有某几个类来实现,外部其它模块只要调用和处理回调函数即可.外部模块和网络模块之间的调用关系可以用如下图表示: 调用端只要创建Request对象,设置参数,发起请求,即可.最后结果通过回调函数返回.右边的异步任务,HttpClient创建,参数解析,错误处理全部交给网络处理模块来完成.由此来看,这个网络模块其实是重复性很高的开发工作