获取图片,解决图片错乱,WebActivity跳转

//主Activity
public class MainActivity extends AppCompatActivity {

    
  private ListView list_view;
private ListView list_view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list_view = (ListView) findViewById(R.id.list_view);
	//清单文件要适配(添加)在主Activity后面  <activity android:name=".WebActivity"/>
	list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    	    @Override
    	    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
       		if (list != null){
            	    Intent intent = new Intent(MainActivity.this , WebActivity.class);

            	    intent.putExtra("url" , list.get(i).getUrl());

            	    startActivity(intent);
        	}
    	    }
	});
MyTask myTask = new MyTask();
	myTask.execute("http://v.juhe.cn/weixin/query?key=88f7bbc507e3ecacfaeab2b47dd8936f");
    }    
	class MyTask extends AsyncTask<String , String , String > {
        	@Override        
		protected String doInBackground(String... strings) {
	            try {                
			HttpClient client = new DefaultHttpClient();
	                HttpGet httpGet = new HttpGet(strings[0]);                
			HttpResponse execute = client.execute(httpGet);
	                int statusCode = execute.getStatusLine().getStatusCode();
	                if (statusCode == 200){
	                    HttpEntity entity = execute.getEntity();
	                    InputStream inputStream = entity.getContent();
	                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
	                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
	                    StringBuilder builder = new StringBuilder();
	                    String s = "";
	                    while ((s=bufferedReader.readLine())!=null){
	                        builder.append(s);
	                    }
	                    bufferedReader.close();
	                    return builder.toString();
	                }
	            } catch (IOException e) { 
	               e.printStackTrace();
	            }
	            return null;
	        }
	        @Override
	        protected void onPostExecute(String s) {
	            super.onPostExecute(s);
	            Gson gson = new Gson();
	            UserBean userBean = gson.fromJson(s, UserBean.class);
	            List<UserBean.ResultBean.ListBean> list = userBean.getResult().getList();
	            MyAdapter myAdapter = new MyAdapter(MainActivity.this, list);
	            list_view.setAdapter(myAdapter);
	        }
	    }}
//WebActivity   清单文件要适配(添加)在主Activity后面  <activity android:name=".WebActivity"/>
public class WebActivity extends Activity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);
        webView = findViewById(R.id.web_view);

        Intent intent = getIntent();
        String url = intent.getStringExtra("url");
        //加载
        webView.loadUrl(url);
        //设置
        webView.setWebViewClient(new WebViewClient());

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
    }
}
//adapter
public class MyAdapter extends BaseAdapter {

    Context context;
    List<UserBean.ResultBean.ListBean> list;

    public MyAdapter(Context context, List<UserBean.ResultBean.ListBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if (view == null){
            holder = new ViewHolder();
            view = View.inflate(context , R.layout.list_view_demo , null);
            holder.imageView = view.findViewById(R.id.image_firstImg);
            holder.textView = view.findViewById(R.id.text_title);
            view.setTag(holder);
        }else{
            holder = (ViewHolder) view.getTag();
        }

        holder.textView.setText(list.get(i).getTitle());
//        new ImageUtil().ImageNei(list.get(i).getFirstImg() , holder.imageView);
        holder.imageView.setImageResource(R.mipmap.ic_launcher);
        if (list.get(i).getFirstImg() != null){
            holder.imageView.setTag(list.get(i).getFirstImg());
            new ImageUtil().ImageNei(holder.imageView , list.get(i).getFirstImg() , new ImageCallBack(){
                @Override
                public void setSuccessImage(ImageView imageView, Bitmap bitmap) {
                    if (list.get(i).getFirstImg().equals(imageView.getTag())){
                        imageView.setImageBitmap(bitmap);
                    }
                }
            });
        }
        return view;
    }
    class ViewHolder{
        ImageView imageView;
        TextView textView;
    }
}
//util
public class ImageUtil {
    public void ImageNei(final ImageView imageView, final String firstImg, final ImageCallBack imageCallBack) {
        AsyncTask<Void, Void, Bitmap> asyncTask = new AsyncTask<Void, Void, Bitmap>() {
            @Override
            protected Bitmap doInBackground(Void... voids) {
                try {
                    URL url = new URL(firstImg);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                        return bitmap;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }
            @Override
            protected void onPostExecute(Bitmap bitmap) {
                imageCallBack.setSuccessImage(imageView , bitmap);
            }
        };
        asyncTask.execute();
    }
}
//接口call
public interface ImageCallBack {
    public void setSuccessImage(ImageView imageView , Bitmap bitmap);
}
//bean
public class UserBean {
    private String reason;
    private ResultBean result;
    private int error_code;

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public ResultBean getResult() {
        return result;
    }

    public void setResult(ResultBean result) {
        this.result = result;
    }

    public int getError_code() {
        return error_code;
    }

    public void setError_code(int error_code) {
        this.error_code = error_code;
    }

    public static class ResultBean {
        private int totalPage;
        private int ps;
        private int pno;
        private List<ListBean> list;

        public int getTotalPage() {
            return totalPage;
        }

        public void setTotalPage(int totalPage) {
            this.totalPage = totalPage;
        }

        public int getPs() {
            return ps;
        }

        public void setPs(int ps) {
            this.ps = ps;
        }

        public int getPno() {
            return pno;
        }

        public void setPno(int pno) {
            this.pno = pno;
        }

        public List<ListBean> getList() {
            return list;
        }

        public void setList(List<ListBean> list) {
            this.list = list;
        }

        public static class ListBean {
            private String id;
            private String title;
            private String source;
            private String firstImg;
            private String mark;
            private String url;

            public String getId() {
                return id;
            }

            public void setId(String id) {
                this.id = id;
            }

            public String getTitle() {
                return title;
            }

            public void setTitle(String title) {
                this.title = title;
            }

            public String getSource() {
                return source;
            }

            public void setSource(String source) {
                this.source = source;
            }

            public String getFirstImg() {
                return firstImg;
            }

            public void setFirstImg(String firstImg) {
                this.firstImg = firstImg;
            }

            public String getMark() {
                return mark;
            }

            public void setMark(String mark) {
                this.mark = mark;
            }

            public String getUrl() {
                return url;
            }

            public void setUrl(String url) {
                this.url = url;
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerView图片错乱问题通常出现在滑动过程中,这是由于RecyclerView的回收复用机制导致的。 RecyclerView的回收复用机制可以提高列表的滑动效率,但在复用过程中有可能出现图片错乱的问题。这是因为复用的View可能会带有之前加载图片或者其他数据,而在新的位置显示时,没有及时更新内容。 解决RecyclerView图片错乱问题的方法有以下几种: 1. 使用ViewHolder设计模式:在ViewHolder中,通过getItemViewType()方法判断当前Item所属类型,然后根据不同的类型进行相应的数据加载图片显示操作。这样可以确保复用的View正确显示对应位置的内容,避免图片错乱问题的发生。 2. 使用图片加载框架:如Glide或Picasso等,这些图片加载框架可以自动处理图片加载、缓存和显示等问题,避免出现图片错乱的情况。可以使用框架提供的方法,在加载图片前对ImageView进行重置,确保显示正确的图片。 3. 设置数据标记:在数据源中为每个Item设置唯一标识,可以使用position作为标识。在加载图片时,将标识与ImageView绑定,只有当标识匹配时才进行图片加载和显示操作。这样可以确保每个ImageView只显示对应标识的图片,避免图片错乱。 4. 及时取消加载:在RecyclerView滑动过程中,可以对滑动过程中无需显示的Item进行图片加载的取消操作,避免加载到错误的图片。可以通过监听滑动事件,在滑动停止时再进行图片加载。 通过以上方法可以有效地解决RecyclerView图片错乱问题,保证列表的显示正确性。在实际开发中,根据具体的情况选择合适的解决方案,并进行适当的优化,保证App的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值