1. 程式人生 > >網路請求圖片,文字,展現在ListView上

網路請求圖片,文字,展現在ListView上

<uses-permission android:name="android.permission.INTERNET"/>
在 <application  寫
android:name=".MApp"
寫依賴
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
二,在main佈局寫
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ListView>
在item佈局裡寫
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
    <ImageView
android:id="@+id/iv" android:layout_width="150dp" android:layout_height="100dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android
:layout_height="wrap_content" android:textSize="16sp" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" /> </LinearLayout> </LinearLayout>
三,在 MainActivity 裡寫
public class MainActivity extends AppCompatActivity {

    private String urlString = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
    private List<TouNews> list;
    private List<News.DataBean> list1;
    private ListView lv;
    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        new MyAsyncTask().execute(urlString);
    }
    class MAsyncTask extends AsyncTask<String,Void,String>{
        @Override
protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Type type = new TypeToken<List<TouNews>>() {}.getType();
            Gson gson = new Gson();
            list = gson.fromJson(s,type);
        }
        @Override
protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
        @Override
protected String doInBackground(String... params) {
            return NetWordUtils.getNetjson(params[0]);
        }
    }
    class PageAdapter extends PagerAdapter{
        @Override
public int getCount() {
            return list.size();
        }
        @Override
public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
        @Override
public Object instantiateItem(ViewGroup container, int position) {
            TextView textView = new TextView(MainActivity.this);
            textView.setText(list.get(position).getString());
            container.addView(textView);
            return textView;
        }
        @Override
public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
    class MyAsyncTask extends AsyncTask<String,Void,String>{
        @Override
protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            News news = gson.fromJson(s, News.class);
           list1 =  news.getData();
            lv.setAdapter(new MyAdapter());
        }
        @Override
protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
        @Override
protected String doInBackground(String... params) {
            return NetWordUtils.getNetjson(params[0]);
        }
    }
    class MyAdapter extends BaseAdapter{
        @Override
public int getCount() {
            return list1.size();
        }
        @Override
public Object getItem(int position) {
            return list1.get(position);
        }
        @Override
public long getItemId(int position) {
            return position;
        }
        @Override
public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = View.inflate(MainActivity.this, R.layout.item, null);
                holder.imageView = convertView.findViewById(R.id.iv);
                holder.textView01 = convertView.findViewById(R.id.tv_title);
                holder.textView02 = convertView.findViewById(R.id.tv_content);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.textView01.setText(list1.get(position).getNews_summary());
            holder.textView02.setText(list1.get(position).getNews_title());
            ImageLoader.getInstance().displayImage(list1.get(position).getPic_url(),holder.imageView);
            return convertView;
        }
    }
    class ViewHolder {
        ImageView imageView;
        TextView textView01;
        TextView textView02;
    }
    class MyAsync extends  AsyncTask<String, Void, Bitmap>{
        ImageView imageView;
        //有參構造
public MyAsync(ImageView imageView) {
            this.imageView = imageView;
        }
        //圖片Imageview賦值
@Override
protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            imageView.setImageBitmap(bitmap);
        }
        //解析圖片
@Override
protected Bitmap doInBackground(String... strings) {
            return NetWordUtils.getNetBitmap(strings[0]);
        }
    }
}
四,在建立個  NetWordUtils 類裡寫
private static String  tag = "NetWordUtils";
/**
 * 獲取網路json
 *
 * @param urlString
* @return
*/
public static String getNetjson(String urlString) {
    try {
        URL url = new URL(urlString);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");//若果是get請求可以不用配置; 其他請求必須配置
urlConnection.setConnectTimeout(8000);//設定連結超時間
InputStream inputStream = urlConnection.getInputStream();//獲取網路返回的輸入流;
        //可拼接的字串
StringBuilder stringBuilder = new StringBuilder();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String temp = "";
        while ((temp = bufferedReader.readLine()) != null) {
            stringBuilder.append(temp);
            temp = "";
        }
        //這個是網路獲取的資料
String data = stringBuilder.toString();
        Log.e(tag, "getData: " + data);
        return data;
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "";
}
/**
 * 獲取網路圖片的工具類
 *
 * @param urlString
* @return
*/
public static Bitmap getNetBitmap(String urlString) {
    try {
        //用URL封裝連結地址;
URL url = new URL(urlString);
        //用url開啟連結
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        //聯網的狀態碼
int responseCode = urlConnection.getResponseCode();
        if(responseCode ==200){
            //連結上獲取輸入流
InputStream inputStream = urlConnection.getInputStream();
            //把流直接轉換成bitmap(系統提供的BitmapFactory)
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//BitmapFactory是個工具類,系統提供的
return bitmap;
        }else {
            Log.e(tag, "網路狀態碼:: "+responseCode );
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
五,在建立個 MApp 類,繼承  Application 裡寫
public void onCreate() {
    super.onCreate();
    ImageLoaderConfiguration imageLoaderConfiguration=new ImageLoaderConfiguration.Builder(this).build();
    ImageLoader.getInstance().init(imageLoaderConfiguration);
}
六,在建立個 TouNews 類裡寫
private String string;
public TouNews(String string) {
    this.string = string;
}
public String getString() {
    return string;
}
public void setString(String string) {
    this.string = string;
}
七,在建立個 News 這個類,裡面寫要解析的東西