Android中AsyncTask的讲解(动态下…
来源:互联网 发布:淘宝 英语教练 编辑:程序博客网 时间:2024/06/06 19:31
TopServer 接口
UrlString 接口的注解
MyAsyncTask 异步代码
Tools 接口实现类
几个注意的点:
1:注解的注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.RUNTIME)
2:动态接口的实现Tools中的getInstance方法:
Object o = Proxy.newProxyInstance(type.getClassLoader(),new Class[]{type}, newMyHandler())
MyAsyncTask代码:
packagecom.jasen.async;
import android.os.AsyncTask;
import com.google.gson.Gson;
importjava.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
importjava.net.HttpURLConnection;
import java.net.URL;
public class MyAsyncTask<<spanstyle="color:#507874;">T> extends AsyncTaskT>,Void,Object> {
private String url;
private Class<<spanstyle="color:#507874;">T> t;
private CallBack<<spanstyle="color:#507874;">T> callBack;
public MyAsyncTask(String url,Class<<spanstyle="color:#507874;">T> t){
this.url = url;
this.t= t;
}
@Override
protected Object doInBackground(CallBack<<spanstyle="color:#507874;">T>... callBacks) {
callBack =callBacks[0];
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
int code =connection.getResponseCode();
if (code == 200) {
InputStream is = connection.getInputStream();
ByteArrayOutputStream bos =newByteArrayOutputStream();
int length = -1;
byte[] buffer = new byte[1024];
while ((length = is.read(buffer)) !=-1) {
bos.write(buffer, 0,length);
}
Gson gson = new Gson();
return gson.fromJson(bos.toString("utf-8"), t);
}else{
return newException("ResponseCode" +code);
}
} catch (IOException e) {
return e;
}
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
if(t.isInstance(o)){
callBack.onSuccess((T)o);
}else{
callBack.onFail((Exception)o);
}
}
public interfaceCallBack<<span style="color:#507874;">S>{
void onSuccess(S text);
void onFail(Exception e);
}
}
import android.os.AsyncTask;
import com.google.gson.Gson;
importjava.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
importjava.net.HttpURLConnection;
import java.net.URL;
public class MyAsyncTask<<spanstyle="color:#507874;">T> extends AsyncTaskT>,Void,Object> {
private String url;
private Class<<spanstyle="color:#507874;">T> t;
private CallBack<<spanstyle="color:#507874;">T> callBack;
public MyAsyncTask(String url,Class<<spanstyle="color:#507874;">T> t){
this.url = url;
this.t= t;
}
@Override
protected Object doInBackground(CallBack<<spanstyle="color:#507874;">T>... callBacks) {
callBack =callBacks[0];
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
int code =connection.getResponseCode();
if (code == 200) {
InputStream is = connection.getInputStream();
ByteArrayOutputStream bos =newByteArrayOutputStream();
int length = -1;
byte[] buffer = new byte[1024];
while ((length = is.read(buffer)) !=-1) {
bos.write(buffer, 0,length);
}
Gson gson = new Gson();
return gson.fromJson(bos.toString("utf-8"), t);
}else{
return newException("ResponseCode" +code);
}
} catch (IOException e) {
return e;
}
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
if(t.isInstance(o)){
callBack.onSuccess((T)o);
}else{
callBack.onFail((Exception)o);
}
}
public interfaceCallBack<<span style="color:#507874;">S>{
void onSuccess(S text);
void onFail(Exception e);
}
}
Tools代码:
packagecom.jasen.async;
importjava.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
importjava.lang.reflect.ParameterizedType;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
import java.util.Locale;
publicclass Tools {
public static<<spanstyle="color:#507874;">T> T getInstance(Class<<spanstyle="color:#507874;">T> type){
Object o = Proxy.newProxyInstance(type.getClassLoader(),new Class[]{type}, newMyHandler());
return (T)o;
}
public static class MyHandlerimplementsInvocationHandler{
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
UrlString annotation =method.getAnnotation(UrlString.class);
if(annotation != null){
String url = String.format(Locale.CHINA,annotation.value(),objects);
Class
importjava.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
importjava.lang.reflect.ParameterizedType;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
import java.util.Locale;
publicclass Tools {
public static<<spanstyle="color:#507874;">T> T getInstance(Class<<spanstyle="color:#507874;">T> type){
Object o = Proxy.newProxyInstance(type.getClassLoader(),new Class[]{type}, newMyHandler());
return (T)o;
}
public static class MyHandlerimplementsInvocationHandler{
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
UrlString annotation =method.getAnnotation(UrlString.class);
if(annotation != null){
String url = String.format(Locale.CHINA,annotation.value(),objects);
Class
0 0
- Android中AsyncTask的讲解(动态下…
- 实例讲解Android中AsyncTask的使用详解
- Android 讲解:AsyncTask
- AsyncTask---详解Android中AsyncTask的使用
- 【AsyncTask】详解Android中AsyncTask的使用
- Android中AsyncTask的用法
- Android中 AsyncTask的使用
- Android 中 AsyncTask 的使用
- Android中AsyncTask的使用
- Android中AsyncTask的使用
- Android中 AsyncTask的使用
- Android中AsyncTask的用法
- Android 中AsyncTask 的使用
- Android中 AsyncTask的使用
- Android中AsyncTask的使用
- Android 中AsyncTask 的使用
- Android中AsyncTask的用法
- Android中糟糕的AsyncTask
- Invariant Violation:Application 项目名 has not been registered.
- Android中Dialog的使用
- source_Insight新建工程
- Android中日期和时间的使用
- Android中Handler的使用
- Android中AsyncTask的讲解(动态下…
- 如何解决Andoroid Studio出现…
- Android Studio如何配置夜神模拟器
- Android Studio的快捷键&nbsp…
- Leetcode 80 Remove Duplicates from Sorted Array II
- 关于listview嵌套gridview
- 一个圆等分的坐标
- 静态编译、动态编译、静态链接库和动态链接库理解
- 四大组件之BroadcastReceiver
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
固安搜房网
城固信息网
西固二手房网
固安二手房网
固安房产信息网首页
固安房源网
固安房产网新楼盘
陕西固废信息网
固网是什么
固网
固话费用查询
固话呼叫转移
固话转接手机怎么设置
固话查询归属地及单位
移动无线固话
电信固话呼叫转移
固话缴费
固话取消呼叫转移
电信固话话费查询
无线固话
没有固话怎么申请信用卡
铁通无线固话办理
电信固话号码段
郑州固话靓号
电信固话
固话归属地查询
固话号码
联通固话
联通无线固话
无线固话办理
安装固话
公司固话办理
联通固话申请
家庭固话
手机固话
固话转接
固话转移
天翼固话
联通办理固话
联通固话安装
如何办理固话