zoukankan      html  css  js  c++  java
  • 公共代码参考(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在获取到网络图片前加载本地默认图片是才报错,折腾了半天啊!!

  • 相关阅读:
    JournalNode的作用
    mysql57重新安装后无法再次启动mysql57服务“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动。”--解决方法
    oracle基础语法
    MYSQL 8.0.11 安装过程及 Navicat 链接时遇到的问题
    MySQL 字符串函数:字符串截取
    java基础总结
    mysql 排名
    mysql——查询重复数据,及删除重复数据只保留一条数据
    松软科技课堂:jQuery 效果
    松软科技课堂:jQuery 效果
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4607731.html
Copyright © 2011-2022 走看看