欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-01 19:19:46
在上篇文章跟大家介绍了android之使用android-query框架开发实战(一),本文继续跟大家介绍有关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框架开发实战(二),希望大家喜欢。