`
wqkerry
  • 浏览: 14137 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Afinal的简单应用(二)

阅读更多

     上篇中叙述了Afinal的finalDB和finalActivity的用法,接下来讲FinalHttp和FinalBitmap。

 

 FinalHttp的使用方法:

        FinalHttp 对 HttpClient再次封装,最简洁的就是增加了许多回调的方法,对Get 和 Post 请求进行了简化。此外还有put,delete和download方法。另外一点就是FinalHttp加入线程池操作,默认的Http请求池连接为3。下面是为FinalHttp可配置的操作.

FinalHttp finalHttp = new FinalHttp();
finalHttp.addHeader("Accept-Charset", "UTF-8");//配置http请求头
finalHttp.configCharset("UTF-8");
finalHttp.configCookieStore(null);
finalHttp.configRequestExecutionRetryCount(3);//请求错误重试次数
finalHttp.configSSLSocketFactory(null);
finalHttp.configTimeout(5000);//超时时间
finalHttp.configUserAgent("Mozilla/5.0");//配置客户端信息

    源码中的get请求:

// ------------------get 请求-----------------------
	public void get(String url, AjaxCallBack<? extends Object> callBack) {
		get(url, null, callBack);
	}

	public void get(String url, AjaxParams params,
			AjaxCallBack<? extends Object> callBack) {
		sendRequest(httpClient, httpContext,
				new HttpGet(getUrlWithQueryString(url, params)), null, callBack);
	}

	public void get(String url, Header[] headers, AjaxParams params,
			AjaxCallBack<? extends Object> callBack) {
		HttpUriRequest request = new HttpGet(getUrlWithQueryString(url, params));
		if (headers != null)
			request.setHeaders(headers);
		sendRequest(httpClient, httpContext, request, null, callBack);
	}

 上述有三个get方法,不同之处在于参数的不同,先看最简单的get方法使用:

FinalHttp fh = new FinalHttp();
fh.get("http://www.yangfuhai.com", new AjaxCallBack(){

    @Override
    public void onLoading(long count, long current) { //每1秒钟自动被回调一次
            textView.setText(current+"/"+count);
    }

    @Override
    public void onSuccess(String t) {
            textView.setText(t==null?"null":t);
    }

    @Override
    public void onStart() {
        //开始http请求的时候回调
    }

    @Override
    public void onFailure(Throwable t, String strMsg) {
        //加载失败的时候回调
    }
});

    上述get方法中有两个参数,一为访问的路径,一个为回调函数,请求后的相应操作可以在回调函数中处理。

源码中的post请求:

	// ------------------post 请求-----------------------
	public void post(String url, AjaxCallBack<? extends Object> callBack) {
		post(url, null, callBack);
	}

	public void post(String url, AjaxParams params,
			AjaxCallBack<? extends Object> callBack) {
		post(url, paramsToEntity(params), null, callBack);
	}

	public void post(String url, HttpEntity entity, String contentType,
			AjaxCallBack<? extends Object> callBack) {
		sendRequest(httpClient, httpContext,
				addEntityToRequestBase(new HttpPost(url), entity), contentType,
				callBack);
	}

	public <T> void post(String url, Header[] headers, AjaxParams params,
			String contentType, AjaxCallBack<T> callBack) {
		HttpEntityEnclosingRequestBase request = new HttpPost(url);
		if (params != null)
			request.setEntity(paramsToEntity(params));
		if (headers != null)
			request.setHeaders(headers);
		sendRequest(httpClient, httpContext, request, contentType, callBack);
	}

	public void post(String url, Header[] headers, HttpEntity entity,
			String contentType, AjaxCallBack<? extends Object> callBack) {
		HttpEntityEnclosingRequestBase request = addEntityToRequestBase(
				new HttpPost(url), entity);
		if (headers != null)
			request.setHeaders(headers);
		sendRequest(httpClient, httpContext, request, contentType, callBack);
	}

 同get方法一样,不同之处也在于参数。简单post方法应用:

AjaxParams params = new AjaxParams();
  params.put("username", "michael yang");
  params.put("password", "123456");
  params.put("email", "test@tsz.net");
  params.put("profile_picture", new File("/mnt/sdcard/pic.jpg")); // 上传文件
  params.put("profile_picture2", inputStream); // 上传数据流
  params.put("profile_picture3", new ByteArrayInputStream(bytes)); // 提交字节流

  FinalHttp fh = new FinalHttp();
  fh.post("http://www.yangfuhai.com", params, new AjaxCallBack(){
        @Override
        public void onLoading(long count, long current) {
                textView.setText(current+"/"+count);
        }

        @Override
        public void onSuccess(String t) {
            textView.setText(t==null?"null":t);
        }
  });

 

 这就是ainalhttp的get和post方法的应用,此外使用比较多的一个方法是download。

 

  来看download的源码:

// ---------------------下载---------------------------------------
	public HttpHandler<File> download(String url, String target,
			AjaxCallBack<File> callback) {
		return download(url, null, target, false, callback);
	}

	public HttpHandler<File> download(String url, String target,
			boolean isResume, AjaxCallBack<File> callback) {
		return download(url, null, target, isResume, callback);
	}

	public HttpHandler<File> download(String url, AjaxParams params,
			String target, AjaxCallBack<File> callback) {
		return download(url, params, target, false, callback);
	}

	public HttpHandler<File> download(String url, AjaxParams params,
			String target, boolean isResume, AjaxCallBack<File> callback) {
		final HttpGet get = new HttpGet(getUrlWithQueryString(url, params));
		HttpHandler<File> handler = new HttpHandler<File>(httpClient,
				httpContext, callback, charset);
		handler.executeOnExecutor(executor, get, target, isResume);
		return handler;
	}

 download的简单应用:

 FinalHttp fh = new FinalHttp();  
    //调用download方法开始下载
    HttpHandler handler = fh.download("http://www.xxx.com/下载路径/xxx.apk", //这里是下载的路径
    true,//true:断点续传 false:不断点续传(全新下载)
    "/mnt/sdcard/testapk.apk", //这是保存到本地的路径
    new AjaxCallBack() {  
                @Override  
                public void onLoading(long count, long current) {  
                     textView.setText("下载进度:"+current+"/"+count);  
                }  

                @Override  
                public void onSuccess(File t) {  
                    textView.setText(t==null?"null":t.getAbsoluteFile().toString());  
                }  

            });  


   //调用stop()方法停止下载
   handler.stop();

 

FinalBitmap的使用:

private static FinalBitmap mFinalBitmap;

	// //////////////////////// config method
	// start////////////////////////////////////
	private FinalBitmap(Context context) {
		mContext = context;
		mConfig = new FinalBitmapConfig(context);
		configDiskCachePath(Utils.getDiskCacheDir(context, "afinalCache")
				.getAbsolutePath());// 配置缓存路径
		configDisplayer(new SimpleDisplayer());// 配置显示器
		configDownlader(new SimpleDownloader());// 配置下载器
	}

 以上为FinalBitmap的构造器源码,代码详细信息已经注释,我们可以看出,FinalBitmap使用的是线程安全的单例模式,因此,当我们想获取一个FinalBitmap对象的时候,我们可以这样做:

 

FinalBitmap finalBitmap = FinalBitmap.create(context);

 之后可以自己去配置相关的参数:

                finalBitmap.configBitmapLoadThreadSize(3);
                //图片大小
                finalBitmap.configBitmapMaxHeight(800);
                finalBitmap.configBitmapMaxWidth(480);
                //磁盘缓存路径
                finalBitmap.configDiskCachePath("");
                finalBitmap.configDiskCacheSize(10*1024);
                //配置显示
                finalBitmap.configDisplayer(new  Displayer() {
                          
                        @Override
                        public void loadFailDisplay(View imageView, Bitmap bitmap) {
                                // TODO Auto-generated method stub
                                //设置失败 显示图片 404 等等
                        }
                          
                        @Override
                        public void loadCompletedisplay(View imageView, Bitmap bitmap,
                                        BitmapDisplayConfig config) {
                                // TODO Auto-generated method stub
                                // 加载成功  开启动画等等imageView.startAnimation();
                        }
                });
                  
                //可自己定义下载器
                finalBitmap.configDownlader(new Downloader() {
                          
                        @Override
                        public byte[] download(String urlString) {
                                // TODO Auto-generated method stub
                                //自己写下载代码。这个已经是异步操作了
                                return null;
                        }
                });
                  
                //加载时显示的图片。即默认图片
                finalBitmap.configLoadingImage(null);
                  
                //配置内存缓存大小
                finalBitmap.configMemoryCacheSize(4);
                  
                //待我后面再讲
                finalBitmap.configRecycleImmediately(true);
                finalBitmap.setExitTasksEarly(true);

 finalBitmap提供了display方法供大家调用,源码中一共有六个不同参数的dispaly方法。(大家可以去看源码)。

   下面展示一种加载网络图片的display的使用方法:

private GridView gridView;
    private FinalBitmap fb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.images);

        gridView = (GridView) findViewById(R.id.gridView);
        gridView.setAdapter(mAdapter);

        fb = FinalBitmap.create(this);//初始化FinalBitmap模块
        fb.configLoadingImage(R.drawable.downloading);
        //这里可以进行其他十几项的配置,也可以不用配置,配置之后必须调用init()函数,才生效
        //fb.configBitmapLoadThreadSize(int size)
        //fb.configBitmapMaxHeight(bitmapHeight)
    }


///////////////////////////adapter getView////////////////////////////////////////////

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView iv;
    if(convertView == null){
        convertView = View.inflate(BitmapCacheActivity.this,R.layout.image_item, null);
        iv = (ImageView) convertView.findViewById(R.id.imageView);
        iv.setScaleType(ScaleType.CENTER_CROP);
        convertView.setTag(iv);
    }else{
        iv = (ImageView) convertView.getTag();
    }
    //bitmap加载就这一行代码,display还有其他重载,详情查看源码
    fb.display(iv,Images.imageUrls[position]);

 

 

分享到:
评论

相关推荐

    AFinal简单使用

    **AFinal简介** AFinal是由尹吉欢(Yin Jihuan)开发的一个轻量级的Android ORM(对象关系映射)框架,它简化了数据库操作,使得...在AFinalDemo项目中,你可以找到更多关于如何在实际应用中使用AFinal的例子和细节。

    AFinal最简单的使用示例

    在你的应用程序的Application类中,创建一个AFinal实例,通常我们会配置一个SQLite数据库: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ...

    afinal最新版本源码

    1. 数据库操作:Afinal基于SQLite,提供了简单易用的ORM(Object-Relational Mapping)框架。通过注解,开发者可以直接在Java对象上进行数据库操作,如增删改查,避免了大量SQL语句的编写。 2. HTTP请求:Afinal内置...

    开源的android应用开发框架Afinal

    Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用; 使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。 ...

    afinal_0.5.1.jar

    `afinal` 是一个专为 Android 应用程序设计的轻量级 ORM(对象关系映射)和 IOC(依赖注入)框架。它的核心目标是简化 Android 开发过程,特别是数据库操作和组件之间的依赖管理。`afinal` 的突出优点在于其简洁易用...

    android非常强大方便的afinal

    Afinal 提供了简单易用的 API,使得数据库操作如同操作 Java 集合一样便捷。在本文中,我们将深入探讨 Afinal 的核心特性、工作原理以及如何在实际项目中应用。 ### 1. Afinal 的主要特性 - **简洁的API**:Afinal...

    afinal的基本实现

    finalDB 是 Afinal 中的数据库管理模块,它基于 SQLite,提供了简单的 API 来进行数据操作。通过 finalDB,开发者可以快速地进行数据库表的创建、查询、更新和删除等操作,无需编写繁琐的 SQL 语句。以下是一些关键...

    afinal源码

    Afinal由林永坚开发,其设计目标是为Android开发者提供一种简单、快速的数据库操作方式。Afinal的核心功能包括:SQL语句的自动拼接、事务管理、数据库连接池以及对SQLite数据库的全面支持。通过Afinal,开发者可以...

    afinal 源码教程 Android框架使用

    2. **初始化Afinal**:在应用程序的Application类中,需要进行Afinal的初始化,一般会指定数据库的路径和名称,例如: ```java Afinal.init(this, "my_database.db", 1); ``` 3. **数据库操作示例**: 创建一...

    Android Afinal开发框架详解

    二、Afinal的网络请求 除了数据库操作,Afinal还提供了网络请求的功能。它封装了HttpURLConnection或OkHttp,使网络请求更加便捷: 1. **异步和同步请求**:Afinal支持异步和同步两种方式发送HTTP请求,异步请求...

    aFinal文件

    aFinal的核心理念是"简单、高效、易用",它将Java的编程风格引入到Android开发中,让开发者可以更加专注于业务逻辑,而不是底层的实现细节。 1. **数据库操作** aFinal提供了强大的SQLite数据库支持,通过注解的...

    afinal demo afinal框架demo

    1. 数据库操作:Afinal基于SQLite数据库,提供了简单易用的API,使得开发者可以方便地进行CRUD(创建、读取、更新、删除)操作。例如,通过继承`BaseModel`类并定义实体类,Afinal会自动创建对应的数据库表。同时,...

    Android代码-afinal开源框架实例源码.zip

    本压缩包"Android代码-afinal开源框架实例源码.zip"包含了Afinal框架的具体应用示例,帮助开发者理解和学习如何在实际项目中运用Afinal。 Afinal的核心特性包括: 1. **数据库操作**:Afinal基于ActiveAndroid,...

    Afinal开源框架

    1. **FinalDB**:这是Afinal中的数据库管理模块,它基于ActiveAndroid进行优化,提供了简单易用的ORM(对象关系映射)功能。FinalDB使得开发者可以通过简单的注解方式将Java对象与SQLite数据库表进行绑定,极大地...

    应用源码之afinal框架实现图片的简单异步缓存加载.zip

    本资源提供了使用afinal框架实现图片的简单异步缓存加载的源码,帮助开发者深入理解afinal框架在实际项目中的应用。 Afinal是一个轻量级的Android开发框架,由知数科技的陈思创建,它整合了I/O操作、数据库ORM...

    Android应用源码之afinal框架实现图片的简单异步缓存加载源代码

    总之,afinal框架通过提供简单易用的API,帮助开发者高效地实现图片的异步加载和缓存,提高了应用的响应速度和用户体验。了解并掌握这一机制,对于优化Android应用的性能至关重要。通过研究afinal框架的源代码,我们...

    afinal框架开发源码

    1. **简单易用**:Afinal提供了简单的API接口,如SQL语句的执行、增删改查等操作,只需要几行代码就能完成。 2. **自动管理数据库升级**:Afinal支持数据库版本管理,当数据库结构发生变化时,可以通过自定义的...

    安卓Android源码——afinal框架实现图片的简单异步缓存加载.zip

    在安卓开发中,图片加载是...总的来说,`afinal`框架通过`BitmapCacheHelper`实现了高效的图片异步加载和缓存,优化了安卓应用的性能,提高了用户体验。理解并熟练运用这一机制,对于安卓开发者来说是非常重要的技能。

    android框架afinal

    二、AFinal的使用步骤 1. **引入依赖**:在项目的build.gradle文件中添加AFinal的依赖库,通常通过Maven或JCenter仓库获取。 2. **初始化配置**:在Application的onCreate()方法中进行AFinal的初始化,设置数据库...

    Afinal框架

    Afinal的SQLite操作不仅支持简单的SQL语句,还支持事务处理,使得数据库操作更加安全可靠。 2. **网络请求** Afinal集成了网络请求功能,支持HTTP/HTTPS协议,可以发送GET、POST等多种HTTP请求。在Android应用中,...

Global site tag (gtag.js) - Google Analytics