主页面布局是一个ListView
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
compile "com.nostra13.universalimageloader:universal-image-loader:1.9.5" compile 'com.google.code.gson:gson:2.6.2'
item:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iv"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv"/> </LinearLayout>
item1:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv_name" android:textSize="50dp" android:layout_centerInParent="true" android:layout_marginLeft="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ff3660" /> </RelativeLayout>
NetWordUtils类:
package com.example.myapplication; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * 2017-09-27. */ public class 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 ""; } }
mapp类:
package com.example.myapplication; import android.app.Application; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; /** * Created by DELL- on 2017/11/6. */ public class mapp extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build();//开始构建 ImageLoader.getInstance().init(config);//全局初始化此配置 } }MainActivity主页面:
package com.example.myapplication; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv; String urlTotal = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1"; private MAdapter mAdapter; private List<News.NewslistBean> list; private String imageUrl=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); initData(); } private void initData() { new MJsonAsyncTask().execute(urlTotal); } class MJsonAsyncTask extends AsyncTask<String, Void, String> { public MJsonAsyncTask() { super(); } //主线程可以更新ui @Override protected void onPostExecute(String s) { super.onPostExecute(s); News news = new Gson().fromJson(s, News.class); list = news.getNewslist(); mAdapter = new MAdapter(); lv.setAdapter(mAdapter); } //这个回调方法是子线程; @Override protected String doInBackground(String... strings) { //取第0个元素,就是url; String netjson = NetWordUtils.getNetjson(strings[0]);//调用网络请求工具类 return netjson; } } class MAdapter extends BaseAdapter { @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 int getViewTypeCount() { return 2; }@Override public int getItemViewType(int position) { if (list.get(position).getPicUrl() != null && !list.get(position).getPicUrl().equals("")){ return 0; }else{ return 1; } } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder1 holder1 = null; ViewHolder2 holder2 = null; int type = getItemViewType(position);//得到当前应该用的布局 if(type == 0){//第一种布局 if(convertView == null){ holder1 = new ViewHolder1(); convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null); holder1.iv = (ImageView) convertView.findViewById(R.id.iv); holder1.tv = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(holder1); }else{ holder1 = (ViewHolder1) convertView.getTag(); } holder1.tv.setText(list.get(position).getTitle()); //给图片赋值 ImageLoader.getInstance().displayImage(list.get(position).getPicUrl(),holder1.iv); }else{//第二种布局 if(convertView == null){ holder2 = new ViewHolder2(); convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item1, null); holder2.tv_1 = (TextView) convertView.findViewById(R.id.tv_1); convertView.setTag(holder2); }else{ holder2 = (ViewHolder2) convertView.getTag(); } holder2.tv_1.setText(list.get(position).getTitle()); } return convertView; } class ViewHolder1{ ImageView iv; TextView tv; } class ViewHolder2{ TextView tv_1; } } }