公共代码参考(Volley)

Volley 是google提供的一个网络库,相对于自己写httpclient确实方便很多,本文参考部分网上例子整理如下,以作备忘:

  • 定义一个缓存类:
public class BitmapCache implements ImageCache {

    private LruCache<String, Bitmap> cache;  

    public BitmapCache() {
        /*LruCache使用一个LinkedHashMap简单的实现内存的缓存,
        没有软引用,都是强引用。如果添加的数据大于设置的最大值,就删除最先缓存的数据来调整内存。*/
        cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                return bitmap.getRowBytes() * bitmap.getHeight();
            }
        };
    }  

    @Override
    public Bitmap getBitmap(String url) {
        return cache.get(url);
    }  

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        cache.put(url, bitmap);
    
  • 例子
public class MainActivity extends Activity {

    private ImageView mImageView;
    private NetworkImageView mNetworkImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mImageView = (ImageView) findViewById(R.id.imageView);
        mNetworkImageView = (NetworkImageView) findViewById(R.id.networkImageView);

        getJSON();
        loadImage();
        NetworkImageView();
        postJSON();
    }

    //post jons数据至服务器端
    private void postJSON(){
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        String JSONDataUrl = "http://192.168.0.28:3000/postjson";
        Map<String, String> map = new HashMap<String, String>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        JSONObject jsonObject = new JSONObject(map);

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
                Request.Method.POST, JSONDataUrl, jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        System.out.println("response=" + response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError arg0) {
                        System.out.println("sorry,Error  " + arg0.getMessage());
                    }
                });
        requestQueue.add(jsonObjectRequest);
    }

    //从服务器get json数据
    private void getJSON() {
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        String JSONDataUrl = "http://192.168.0.28:3000/";
        final ProgressDialog progressDialog = ProgressDialog.show(this,
                "This is title", "...Loading...");

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
                Request.Method.GET, JSONDataUrl, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        System.out.println("response=" + response);
                        if (progressDialog.isShowing()
                                && progressDialog != null) {
                            progressDialog.dismiss();
                        }
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError arg0) {
                        System.out.println("sorry,Error  " + arg0.getMessage());
                    }
                });
        requestQueue.add(jsonObjectRequest);
    }

    //采用imageloader加载图片资源
    private void loadImage() {
        String imageUrl = "http://192.168.0.28:3000/getimage";
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        ImageLoader imageLoader = new ImageLoader(requestQueue,
                new BitmapCache());
        ImageListener listener = ImageLoader.getImageListener(mImageView,
                R.drawable.test, R.drawable.test);
        imageLoader.get(imageUrl, listener, 200, 200);
    }

    //采用NetworkImageView组件加载图片资源
    private void NetworkImageView() {
        String imageUrl = "http://192.168.0.28:3000/getimage";
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        ImageLoader imageLoader = new ImageLoader(requestQueue,
                new BitmapCache());

        mNetworkImageView.setTag("url");
        mNetworkImageView.setImageUrl(imageUrl, imageLoader);
    }
}

遇到的问题:

1、“Error generating final archive: Found duplicate file for APK: AndroidManifes”,引用的jar包有问题,里面包含了res和manifest.xml,重新在网上下载了一个就OK了;

2、ImageLoader.get()报空指针错误,事实上是findViewById写到setContentView前面去了,导致资源的句柄根本就没取到;这个低级错误,eclipse工程是不会提醒的。。,程序报错要到imageview在获取到网络图片前加载本地默认图片是才报错,折腾了半天啊!!

时间: 2024-10-08 22:00:11

公共代码参考(Volley)的相关文章

公共代码参考(httpclient)

public class HttpClientUtils { private static final String CHARSET = "UTF-8"; /* * http get请求 * * @param url * * @param params * * @return */ public static String httpGet(String url, Map<String, String> params) { if (true == StringUtils.is

公共代码参考(ConnectivityManager)

package com.fredric.util; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; /*- * 网络工具类 */ public class NetUtils { //判断网络是否连接 public static boolean isConnecte

公共代码参考(SDCard)

package com.fredric.util; /*- * SD卡操作的工具类封装 */ import java.io.File; import android.os.Environment; import android.os.StatFs; public class SDCardUtils { //判断SA卡是否被正常加载 //Environment是android一个访问环境变量的类 //MEDIA_MOUNTED SD卡正常挂载 //MEDIA_REMOVED 无介质 //MEDIA

公共代码参考(SQLiteOpenHelper)

package com.fredric.util; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android

公共代码参考(TypedValue)

package com.fredric.util; import android.content.Context; import android.util.TypedValue; /*- * 像素转换相关 * COMPLEX_UNIT_PX:像素 * COMPLEX_UNIT_DIP:设备独立像素(与硬件设备无关) * COMPLEX_UNIT_PT:标准长度单位1/72英寸 * COMPLEX_UNIT_IN:英寸 * COMPLEX_UNIT_MM:毫米 * Google建议: * 像素类的

公共代码参考(DisplayMetrics)

package com.fredric.util; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.util.DisplayMetrics; import android.view.View; import android.view.WindowManager; /*- * 屏幕交互类封装 */ public class Scre

公共代码参考(PackageManager)

package com.fredric.util; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; /*- * APP辅助类 */ public class AppUtils { //获取APP

通达OA公共代码 php常用检测函数

通达OA公共代码 php常用检测函数 从通达OA公共代码扒下的php常用检测函数代码,学习php的朋友可以参考下. check_type.php(使用类型检验函数) 复制代码 代码如下: <?php /*********************/ /* */ /* Version : 5.1.0 */ /* Author : RM */ /* Comment : 071223 */ /* */ /*********************/ function is_number( $str )

如何在vuejs中抽出公共代码

当我们在使用vue构建中大型项目时,通常会遇到某些经常用的方法以及属性,比如说搭建一个员工管理系统,请求的url需要一个共同的前缀,或者在某几个view中需要用到时间,这个时间是通过某方法格式化之后的等等,如果每次用到都写共同的代码,那样如果之后有变动的话维护起来会非常麻烦. 所以我们就得想办法抽出公共代码,因为vue是组件化开发,我们就会很自然的与es6的module模块化联系到一起.其实当我们在搭建项目结构时就应该先提前埋下伏笔,有一个util文件夹,里面放的就是我们要写的公共代码,其实很多