網路請求圖片,文字,展現在ListView上
阿新 • • 發佈:2019-02-10
<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"> <ImageViewandroid: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 這個類,裡面寫要解析的東西