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框架开发实战(二),希望大家喜欢。