在线咨询
微信咨询
服务热线
服务热线:15639912513
TOP
当前位置:
首页 > 新闻中心> 安卓课堂>通过setImageURI获取网络图片

通过setImageURI获取网络图片

发布时间:2020-01-16 浏览:5565次

郑州app开发新闻列表时候,遇到新闻列表中的图片展示,因为图片需要获取网络图片,imageview中的setImageURL提示不兼容的类型: String无法转换为Uri。导致android studio运行结果提示不兼容的类型: String无法转换为Uri。解决方法是需要自己定义类,解决imageview中setImageURL无法输入string的问题。

控件布局代码如下

adv_1.png

adv_1.png

mainactivity中的代码是

package cn.xhhkj.xhhkjtest;


import android.os.Bundle;

import android.os.Handler;

import android.util.Xml;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ListView;

import android.widget.TextView;


import androidx.appcompat.app.AppCompatActivity;


import org.xmlpull.v1.XmlPullParser;


import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

    private ListView lv_list;

    private String path = "http://192.168.0.101/news.xml";

    private ArrayListnewslist = new ArrayList();

    protected static final int GET_DATA = 0;

    private MyAdapter adapter;

    private Handler handler = new Handler(){

        public void handleMessage(android.os.Message msg) {

            switch (msg.what) {

                case GET_DATA:

                    lv_list.setAdapter(adapter);

                    break;


            }

        };

    };

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        lv_list = (ListView) findViewById(R.id.lv_list);

        adapter = new MyAdapter();

        initData();

    }

    private void initData(){

        new Thread(){

            public void run(){

                try{

                    URL url = new URL(path);

                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                    connection.setRequestMethod("GET");

                    connection.setConnectTimeout(10000);

                    int code = connection.getResponseCode();

                    if (code == 200){

                        InputStream inputStream = connection.getInputStream();

                        XmlPullParser pullParser = Xml.newPullParser();

                        pullParser.setInput(inputStream, "utf-8");

                        int eventType = pullParser.getEventType();

                        NewsItem item = null;

                        while (eventType != XmlPullParser.END_DOCUMENT){

                            switch(eventType){

                                case XmlPullParser.START_TAG:

                                    if("item".equals(pullParser.getName())){

                                        item = new NewsItem();

                                    }else if("title".equals(pullParser.getName())){

                                        item.title = pullParser.nextText();

                                    }else if("description".equals(pullParser.getName())){

                                        item.description = pullParser.nextText();

                                    }else if("img".equals(pullParser.getName())){

                                        item.img = pullParser.nextText();

                                    }else if("time".equals(pullParser.getName())){

                                        item.time = pullParser.nextText();

                                    }

                                    break;

                                case XmlPullParser.END_TAG:

                                    if ("item".equals(pullParser.getName())) {

                                        newslist.add(item);

                                    }

                                    break;

                            }

                            eventType = pullParser.next();

                        }

                        for(NewsItem item1: newslist){

                            System.out.println(item1);

                        }

                        handler.sendEmptyMessage(GET_DATA);

                    }

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        }.start();

    }

    private class MyAdapter extends BaseAdapter{

        @Override

        public int getCount() {

            return newslist.size();

        }

        @Override

        public Object getItem(int position) {

            return newslist.get(position);

        }

        @Override

        public long getItemId(int position) {

            return position;

        }

        @Override

        public View getView(int position, View convertView, ViewGroup parent){

            View view = null;

            if(convertView == null){

                view = View.inflate(MainActivity.this, R.layout.item, null);

            }else {

                view = convertView;

            }

            TextView tv_title = (TextView) view.findViewById(R.id.tv_title);

            TextView tv_content = (TextView) view.findViewById(R.id.tv_content);

            TextView tv_time = (TextView) view.findViewById(R.id.tv_time);

            MySmartImageView iv_image = (MySmartImageView) view.findViewById(R.id.iv_icon);

            NewsItem newsItem = newslist.get(position);

            tv_title.setText(newsItem.title);

            tv_content.setText(newsItem.description);

            tv_time.setText(newsItem.time);

            iv_image.setImageURL(newsItem.img);

            return view;

        }

    }


}

以上是主代码,那么自己定义的类

package cn.xhhkj.xhhkjtest;


import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;


import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Handler;

import android.os.Message;

import android.util.AttributeSet;

import android.widget.ImageView;


public class MySmartImageView extends ImageView {

    protected static final int GET_PIC_FAILED = 0;

    protected static final int GET_PIC_SUCCESS = 1;

    private Handler handler = new Handler(){

        public void handleMessage(android.os.Message msg) {

            Bitmap bm = (Bitmap) msg.obj;

            setImageBitmap(bm);


        };

    };

    public MySmartImageView(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

    }

    public MySmartImageView(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    public MySmartImageView(Context context) {

        super(context);

    }

    public void setImageURL(final String path){

        new Thread(){

            public void run() {

                try {

                    URL url = new URL(path);

                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                    connection.setRequestMethod("GET");

                    connection.setConnectTimeout(10000);

                    int code = connection.getResponseCode();

                    if(code==200){

                        InputStream inputStream = connection.getInputStream();

                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

                        Message msg  = Message.obtain();

                        msg.obj = bitmap;

                        handler.sendMessage(msg);

                    }

                } catch (Exception e) {

                    e.printStackTrace();

                }

            };

        }.start();


    }

}

运行结果如图:

adv_1.png

 





 


TAG
5565
该内容对我有帮助