如何添加一个ArrayList凌空图像的要求?图像、ArrayList

2023-09-07 12:03:35 作者:一颗心只给一个人

我有以下code两件事情,排球要求,即树立一个形象,而数组列表适配器 ,显示静态图像。

我需要帮助添加凌空请求数组列表中,我想

ArrayList中所示的凌空图片

怎么做,你能帮助我吗?

(注意我已经有一个phpscript为给我一个JSON图像的路径URL)的

在code:main_activity

 保护无效的onCreate(包savedInstanceState){
  super.onCreate(savedInstanceState);
  的setContentView(R.layout.activity_main);
  请求队列mRequestQueue;

  最后弦乐IMAGE_URL =
            http://developer.android.com/images/training/system-ui.pn​​g;
  mNetworkImageView =(NetworkImageView)findViewById(R.id.networkImageView);

//初始化Cache
缓存缓存=新DiskBasedCache(getCacheDir(),1024 * 1024); // 1MB帽

//设置为使用的HttpURLConnection作为HTTP客户端网络。
网络网络=新BasicNetwork(新HurlStack());

//实例化缓存和网络的请求队列。
mRequestQueue =新的请求队列(缓存,网络);

//开始排队
mRequestQueue.start();


ImageLoader的mImageLoader =新ImageLoader的(mRequestQueue,新LruBitmapCache(
            LruBitmapCache.getCacheSize(mContext)));
mNetworkImageView.setImageUrl(IMAGE_URL,mImageLoader);


CustomListAdapter适配器=新CustomListAdapter(这一点,了itemname,imgid);
名单=(ListView控件)findViewById(R.id.list);
list.setAdapter(适配器);

list.setOnItemClickListener(新OnItemClickListener(){

    @覆盖
    公共无效onItemClick(适配器视图<>母公司视图中查看,
            INT位置,长的id){
        // TODO自动生成方法存根
        字符串Slecteditem =了itemname [+位置]
        Toast.makeText(getApplicationContext(),Slecteditem,Toast.LENGTH_SHORT).show();

    }
});

}
 

arraylistadapter

包com.example.p;

 进口android.app.Activity;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;

公共类CustomListAdapter扩展ArrayAdapter<字符串> {

    私人最终活动范围内;
    私人最终的String []了itemname;
    私人最终整数[] imgid;

    公共CustomListAdapter(活动的背景下,的String []了itemname,整数[] imgid){
        超(背景下,R.layout.mylist,了itemname);
        // TODO自动生成构造函数存根

        this.context =背景;
        this.itemname =了itemname;
        this.imgid = imgid;
    }

    公共查看getView(INT的立场,观点来看,一个ViewGroup父){
        LayoutInflater充气= context.getLayoutInflater();
        查看rowView = inflater.inflate(R.layout.mylist,空,真正的);

        TextView的txtTitle =(TextView中)rowView.findViewById(R.id.item);
        ImageView的ImageView的=(ImageView的)rowView.findViewById(R.id.icon);
        TextView的extratxt =(TextView中)rowView.findViewById(R.id.textView1);

        txtTitle.setText(了itemname [位置]);
        imageView.setImageResource(imgid [位置]);
        extratxt.setText(说明+了itemname [位置]);
        返回rowView;

    };
}
 

和Lrubitmapcache

 包com.example.p;

进口android.content.Context;
进口android.graphics.Bitmap;
进口android.support.v4.util.LruCache;
进口android.util.DisplayMetrics;
进口com.android.volley.toolbox.ImageLoader.ImageCache;

公共类LruBitmapCache扩展LruCache<字符串,位图>
        实现ImageCache {

    公共LruBitmapCache(INT MAXSIZE){
        超(MAXSIZE);
    }

    公共LruBitmapCache(上下文CTX){
        这个(getCacheSize(CTX));
    }

    @覆盖
    保护INT整型尺寸(字符串键,位图值){
        返回value.getRowBytes()* value.getHeight();
    }

    @覆盖
    公共位图getBitmap(字符串URL){
        得到的回报(URL);
    }

    @覆盖
    公共无效putBitmap(字符串URL,位图位图){
        把(URL,位图);
    }

    //返回一个缓存大小等于约三屏的图像。
    公共静态INT getCacheSize(上下文CTX){
        最后DisplayMetrics displayMetrics = ctx.getResources()。
                getDisplayMetrics();
        最终诠释屏幕宽度= displayMetrics.widthPixels;
        最终诠释screenHeight = displayMetrics.heightPixels;
        每像素// 4字节
        最终诠释screenBytes =屏幕宽度* screenHeight * 4;

        返回screenBytes * 3;
    }
}
 
一个arraylist,往里面add值的时候,遇到重复就不要添加,怎么做

解决方案

其他职位,你找我帮忙。 我的图片来自于一个REST服务器为JSON字符串的Base64 codeD。然后,我做了下:

 公开查看getView(INT位置,查看convertView,ViewGroup中父){
        最后ObjectLogados O = items.get(位置);
        最后ViewHolder持有人;
        查看VI = convertView;
        如果(六== NULL){
            LayoutInflater充气= context.getLayoutInflater();
            VI = inflater.inflate(R.layout.singlerowlog,NULL); // E'preciso FAZERØ充气的POI视图孬孬ainda ESTA EM活动alguma
            持有人=新ViewHolder();
            holder.ivImgMedLog =(ImageView的)vi.findViewById(R.id.ivp_imagemedlog);
            holder.tv_usuario =(TextView中)vi.findViewById(R.id.tv_hnomemedlogado);
            vi.setTag(保持器);

        }
        其他 {
            支架=(ViewHolder)convertView.getTag();
        }

        holder.tv_usuario.setText(o.getUsuario());
        串imageKey =MED+将String.valueOf(o.getNr_usuario());
        最后的位图位= Common.getInstance()getBitmapFromMemCache(imageKey)。
        如果(位图!= NULL){
            holder.ivImgMedLog.setImageBitmap(位);
        }其他 {
            holder.ivImgMedLog.setImageDrawable(context.getResources()
                    .getDrawable(R.drawable.empty));
            downloadimage(holder.ivImgMedLog,o.getNr_usuario());
        }

        返回六;
    }

    静态类ViewHolder {
        TextView的tv_usuario;
        ImageView的ivImgMedLog;

    }

    私人无效downloadimage(最终的ImageView ImageView的,最终诠释NR){
        //最后的ImageView ImageView的= IMV;
        字符串URL = Common.getServerURL()+\RetrieveImageStaff \;
        JSONArray JA =新JSONArray();
        ja.put(NR);

        JSONObject的jsonBody =新的JSONObject();
        尝试 {
            jsonBody.put(_参数,JA);
        }赶上(JSONException E){
            e.printStackTrace();
        }
        JsonObjectRequest JR =新JsonObjectRequest(Request.Method.POST,网址,
                jsonBody,新Response.Listener<的JSONObject>(){

            @覆盖
            公共无效onResponse(JSONObject的响应){
                JSONObject的anEntry =空,条目= NULL;
                字符串IMS =;
                尝试{// TODO自动生成方法存根
                    JSONArray LRESULT = response.getJSONArray(结果);
                    字符串s = LResult.get(0)的ToString();
                    anEntry =新的JSONObject(S);
                    IMS = anEntry.getString(IMAGEM);
                }赶上(JSONException E){
                    // TODO自动生成的catch块
                    e.printStackTrace();
                }


                位图德codedByte = NULL;
                尝试 {
                    如果(!TextUtils.isEmpty(IMS)){
                        byte []的德codedString = Base64.de code(IMS,Base64.DEFAULT);
                        德codedByte = BitmapFactory.de codeByteArray(德codedString,0,德codedString.length);
                        如果(ImageView的!= NULL){
                            如果(德codedByte!= NULL){
                                imageView.setImageBitmap(德codedByte);
                                。Common.getInstance()addBitmapToMemoryCache(MED+将String.valueOf(NR),德codedByte);
                            } 其他 {
                                imageView.setImageDrawable(imageView.getContext()。getResources()
                                        .getDrawable(R.drawable.empty));
                            }
                        }
                    } 其他 {
                        imageView.setImageDrawable(imageView.getContext()。getResources()
                                .getDrawable(R.drawable.empty));
                    }
                }赶上(例外五){
                    e.printStackTrace();
                }
            }

        },新Response.ErrorListener(){

            @覆盖
            公共无效onErrorResponse(VolleyError错误){
                // TODO自动生成方法存根
                //Log.v(TAG,error.getMessage());
                Toast.makeText(上下文,ERRO adquirindo IMAGEM ....+ error.getMessage(),Toast.LENGTH_SHORT).show();
                error.printStackTrace();
            }
        });
        jr.setRetryPolicy(新DefaultRetryPolicy(Common.DEFAULT_TIMEOUT_MS,
                Common.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

        。Common.getInstance()addToReqQueue(JR,jreq); //reqQueue.add(jr);
    }
 

您可以更改使用凌空并获得图像的要求。所以,你可以在的描述更改code https://developer.android.com/intl/ja/training/volley/request.html#request-image 以类似于:

  ImageView的mImageView;
字符串URL =htt​​p://i.imgur.com/7spzG.png;
mImageView =(ImageView的)findViewById(R.id.myImage);
...

//获取由URL指定的图像,在用户界面中显示出来。
ImageRequest请求=新ImageRequest(URL,
    新Response.Listener<位图>(){
        @覆盖
        公共无效onResponse(位图位图){
            mImageView.setImageBitmap(位);
        }
    },0,0,null,则
    新Response.ErrorListener(){
        公共无效onErrorResponse(VolleyError错误){
            mImageView.setImageResource(R.drawable.image_load_error);
        }
    });
//通过你的单例类访问请求队列。
MySingleton.getInstance(本).addToRequestQueue(要求);
 

I have below code 2 things , Volley request that set an image , and array list adapter that show static images.

I need help to add the volley request in the array list , I want the volley images shown in the arraylist

How to do that can you help me please?

(note I already have a phpscript for that send me in a json the path url of images)

The code :main_activity

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  RequestQueue mRequestQueue;

  final String IMAGE_URL =
            "http://developer.android.com/images/training/system-ui.png";
  mNetworkImageView = (NetworkImageView) findViewById(R.id.networkImageView);

//Instantiate the cache
Cache cache = new DiskBasedCache(getCacheDir(), 1024 * 1024); // 1MB cap

//Set up the network to use HttpURLConnection as the HTTP client.
Network network = new BasicNetwork(new HurlStack());

//Instantiate the RequestQueue with the cache and network.
mRequestQueue = new RequestQueue(cache, network);

//Start the queue
mRequestQueue.start();


ImageLoader mImageLoader = new ImageLoader(mRequestQueue, new LruBitmapCache(
            LruBitmapCache.getCacheSize(mContext)));
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);


CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);

list.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        // TODO Auto-generated method stub
        String Slecteditem= itemname[+position];
        Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();

    }
});

}

arraylistadapter

package com.example.p;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomListAdapter extends ArrayAdapter<String> {

    private final Activity context;
    private final String[] itemname;
    private final Integer[] imgid;

    public CustomListAdapter(Activity context, String[] itemname, Integer[] imgid) {
        super(context, R.layout.mylist, itemname);
        // TODO Auto-generated constructor stub

        this.context=context;
        this.itemname=itemname;
        this.imgid=imgid;
    }

    public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.mylist, null,true);

        TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);

        txtTitle.setText(itemname[position]);
        imageView.setImageResource(imgid[position]);
        extratxt.setText("Description "+itemname[position]);
        return rowView;

    };
}

and Lrubitmapcache

package com.example.p;

import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import android.util.DisplayMetrics;
import com.android.volley.toolbox.ImageLoader.ImageCache;

public class LruBitmapCache extends LruCache<String, Bitmap>
        implements ImageCache {

    public LruBitmapCache(int maxSize) {
        super(maxSize);
    }

    public LruBitmapCache(Context ctx) {
        this(getCacheSize(ctx));
    }

    @Override
    protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes() * value.getHeight();
    }

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

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        put(url, bitmap);
    }

    // Returns a cache size equal to approximately three screens worth of images.
    public static int getCacheSize(Context ctx) {
        final DisplayMetrics displayMetrics = ctx.getResources().
                getDisplayMetrics();
        final int screenWidth = displayMetrics.widthPixels;
        final int screenHeight = displayMetrics.heightPixels;
        // 4 bytes per pixel
        final int screenBytes = screenWidth * screenHeight * 4;

        return screenBytes * 3;
    }
}

解决方案

in other post you ask me for help. My image comes from a rest server as Json string Base64 coded. Then I do the next:

  public View getView(int position, View convertView, ViewGroup parent) {
        final ObjectLogados o = items.get(position);
        final ViewHolder holder;
        View vi = convertView;
        if (vi == null){
            LayoutInflater inflater = context.getLayoutInflater();
            vi = inflater.inflate(R.layout.singlerowlog, null);// e' preciso fazer o inflate pois a view nao ainda nao esta em activity alguma
            holder = new ViewHolder();
            holder.ivImgMedLog= (ImageView) vi.findViewById(R.id.ivp_imagemedlog) ;
            holder.tv_usuario = (TextView) vi.findViewById(R.id.tv_hnomemedlogado);
            vi.setTag(holder);

        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.tv_usuario.setText(o.getUsuario());
        String imageKey="MED"+String.valueOf(o.getNr_usuario());
        final Bitmap bitmap = Common.getInstance().getBitmapFromMemCache(imageKey);
        if (bitmap != null) {
            holder.ivImgMedLog.setImageBitmap(bitmap);
        }else {
            holder.ivImgMedLog.setImageDrawable(context.getResources()
                    .getDrawable(R.drawable.empty));
            downloadimage(holder.ivImgMedLog,o.getNr_usuario());
        }

        return vi;
    }

    static class ViewHolder {
        TextView tv_usuario;
        ImageView ivImgMedLog;

    }

    private void downloadimage(final ImageView imageView,final int nr){
        //final ImageView imageView=imV;
        String url=Common.getServerURL() + "\"RetrieveImageStaff\"";
        JSONArray ja = new JSONArray();
        ja.put(nr);

        JSONObject jsonBody = new JSONObject();
        try {
            jsonBody.put("_parameters", ja);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        JsonObjectRequest jr = new JsonObjectRequest(Request.Method.POST, url,
                jsonBody, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                JSONObject anEntry = null, entries = null;
                String ims = "";
                try {   // TODO Auto-generated method stub
                    JSONArray LResult = response.getJSONArray("result");
                    String s = LResult.get(0).toString();
                    anEntry = new JSONObject(s);
                    ims = anEntry.getString("imagem");
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                Bitmap decodedByte = null;
                try {
                    if (!TextUtils.isEmpty(ims)) {
                        byte[] decodedString = Base64.decode(ims, Base64.DEFAULT);
                        decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
                        if (imageView != null) {
                            if (decodedByte != null) {
                                imageView.setImageBitmap(decodedByte);
                                Common.getInstance().addBitmapToMemoryCache("MED"+String.valueOf(nr), decodedByte);
                            } else {
                                imageView.setImageDrawable(imageView.getContext().getResources()
                                        .getDrawable(R.drawable.empty));
                            }
                        }
                    } else {
                        imageView.setImageDrawable(imageView.getContext().getResources()
                                .getDrawable(R.drawable.empty));
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO Auto-generated method stub
                //Log.v(TAG, error.getMessage());
                Toast.makeText(context, "Erro adquirindo imagem...." + error.getMessage(), Toast.LENGTH_SHORT).show();
                error.printStackTrace();
            }
        });
        jr.setRetryPolicy(new DefaultRetryPolicy(Common.DEFAULT_TIMEOUT_MS,
                Common.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

        Common.getInstance().addToReqQueue(jr, "jreq"); //reqQueue.add(jr);
    }

You can change the request to use volley and get a image. So, you can change the code as described in https://developer.android.com/intl/ja/training/volley/request.html#request-image to something similar to:

ImageView mImageView;
String url = "http://i.imgur.com/7spzG.png";
mImageView = (ImageView) findViewById(R.id.myImage);
...

// Retrieves an image specified by the URL, displays it in the UI.
ImageRequest request = new ImageRequest(url,
    new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap bitmap) {
            mImageView.setImageBitmap(bitmap);
        }
    }, 0, 0, null,
    new Response.ErrorListener() {
        public void onErrorResponse(VolleyError error) {
            mImageView.setImageResource(R.drawable.image_load_error);
        }
    });
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(request);