一,添加权限
<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"/>
二,在 <application 里写
android:name=".MApp"
三,添加依赖
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.android.support:design:26+' compile 'com.google.code.gson:gson:2.2.4' compile 'com.github.userswlwork:pull-to-refresh:1.0.0' compile 'com.youth.banner:banner:1.4.9'
四,main 布局
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/drawerLayout" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="bwei.com.zonghelianxi.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/plv" android:layout_width="match_parent" android:layout_height="match_parent"/> <ListView android:id="@+id/lv" android:layout_width="240dp" android:layout_height="match_parent" android:choiceMode="singleChoice" android:divider="#000" android:layout_gravity="start" android:dividerHeight="1dp" android:background="#007efe"> </ListView> </android.support.v4.widget.DrawerLayout>五,list_item01 布局<?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:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>六,main 主方法public class MainActivity extends AppCompatActivity { //初始化资源 private DrawerLayout drawerLayout; private PullToRefreshListView plv; String url = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1"; int pager = 0; List<Bean.DataBean> list = new ArrayList<>(); private MyAdaper myAdaper; private ListView lv; ArrayList<String> list1 = new ArrayList<String>();@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //设置侧滑抽屉 drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); lv = (ListView) findViewById(R.id.lv); getData(); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { drawerLayout.closeDrawer(lv); } }); //设置pullTo上下啦 plv = (PullToRefreshListView) findViewById(R.id.plv); plv.setMode(PullToRefreshBase.Mode.BOTH); initData(pager); //适配器 myAdaper = new MyAdaper(); plv.setAdapter(myAdaper); plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { list.clear(); pager = 0; initData(pager); } //下拉 @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { pager =pager+20; initData(pager); } }); } private void getData(){ list1.add("你"); list1.add("好"); list1.add("客服热线"); ArrayAdapter<String> mApadter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_expandable_list_item_1,list1); lv.setAdapter(mApadter); } //适配器 class MyAdaper extends BaseAdapter{ @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View view, ViewGroup parent) { //优化 ViewHolder holder = null; if (view == null) { holder = new ViewHolder(); view = View.inflate(MainActivity.this, R.layout.list_item01, null); holder.textView = view.findViewById(R.id.tv); holder.imageView = view.findViewById(R.id.image); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.textView.setText(list.get(position).getNews_title()); ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),holder.imageView); return view; } class ViewHolder { TextView textView; ImageView imageView; } } //初始化资源 private void initData(int pager) { new MyAsync().execute(url+pager); } class MyAsync extends AsyncTask<String,Void,String>{ @Override protected String doInBackground(String... params) { String netjson = NetWordUtils.getNetjson(params[0]); return netjson; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); Bean bean = gson.fromJson(s, Bean.class); List<Bean.DataBean> data = bean.getData(); list.addAll(data); myAdaper.notifyDataSetChanged(); plv.onRefreshComplete(); } } }七,创建 MApp 类,继承 Application
public void onCreate() { super.onCreate(); ImageLoaderConfiguration imageLoaderConfiguration=new ImageLoaderConfiguration.Builder(this).build(); ImageLoader.getInstance().init(imageLoaderConfiguration); }八,创建 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; }九,创建 Bean 类,解析