新闻案例网络版(listview实现)
来源:互联网 发布:吉诺比利巅峰数据 编辑:程序博客网 时间:2024/05/20 04:49
package com.itheima74.newsnet;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.SystemClock;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.itheima74.newsnet.dao.NewsDao;import com.itheima74.newsnet.domain.NewsBean;import com.itheima74.newsnet.utils.NewsUtil;import com.itheima74.newsnet.view.MyImageView;import java.util.ArrayList;/** * 1.使用tomcat作为本地服务器 * 2.访问服务器,获取json数据并解析 * 3.本地缓存到数据库 * 4.加载网络图片使用自定义控件 * 5.listview展示数据 */public class MainActivity extends AppCompatActivity { private ListView lv; private ArrayList<NewsBean> mLocalNewsList; private MyAdapter mAdapter; private static final int LOCAL_LIST_IS_OK = 1; private static final int NET_LIST_IS_OK = 2; private static final int NET_FAIL = 3; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case LOCAL_LIST_IS_OK: mAdapter = new MyAdapter(); lv.setAdapter(mAdapter); break; case NET_LIST_IS_OK: mAdapter.notifyDataSetChanged(); break; case NET_FAIL: Toast.makeText(MainActivity.this, "网络连接失败", Toast.LENGTH_SHORT).show(); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initData() { //1.先去本地数据库获取数据 getLocalData(); //2.再去网络请求数据 getNetData(); } /** * 网络获取新闻数据,子线程查询 */ private void getNetData() { new Thread() { @Override public void run() { // 睡眠5秒后去网络获取数据 SystemClock.sleep(5 * 1000); ArrayList<NewsBean> netNewsList = NewsUtil.getNetNewsList(mLocalNewsList, getApplicationContext()); // 如果网络数据已更新,则需刷新界面 if (netNewsList.size() > mLocalNewsList.size()) { mLocalNewsList = netNewsList; // 刷新界面需要主线程进行 Message message = Message.obtain(); message.what = NET_LIST_IS_OK; mHandler.sendMessage(message); } else if (netNewsList.size() == 0) {// 未获取网络数据,网络异常 // 打印吐司需要在主线程运行 Message message = Message.obtain(); message.what = NET_FAIL; mHandler.sendMessage(message); } } }.start(); } /** * 本地数据库获取新闻数据,子线程查询 */ private void getLocalData() { new Thread() { @Override public void run() { NewsDao newsDao = new NewsDao(getApplicationContext()); mLocalNewsList = newsDao.query(); Message message = Message.obtain(); message.what = LOCAL_LIST_IS_OK; mHandler.sendMessage(message); } }.start(); } private void initView() { lv = (ListView) findViewById(R.id.lv); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(mLocalNewsList.get(position).news_url)); startActivity(intent); } }); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return mLocalNewsList.size(); } @Override public NewsBean getItem(int position) { return mLocalNewsList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(getApplicationContext(), R.layout.listview_item, null); } // 初始化控件 TextView tv_title = (TextView) convertView.findViewById(R.id.tv_title); TextView tv_des = (TextView) convertView.findViewById(R.id.tv_des); TextView tv_comment = (TextView) convertView.findViewById(R.id.tv_comment); TextView tv_type = (TextView) convertView.findViewById(R.id.tv_type); // MyImageView是自定义可加载网络图片的控件 MyImageView myImageView = (MyImageView) convertView.findViewById(R.id.iv_icon); // 更新内容 NewsBean newsBean = getItem(position); tv_title.setText(newsBean.title); tv_des.setText(newsBean.des); tv_comment.setText("评论数:" + newsBean.commont); switch (newsBean.type) { case 1: tv_type.setText("科技"); break; case 2: tv_type.setText("时事"); break; case 3: tv_type.setText("头条"); break; } // myImageView单独加载图片内容 myImageView.setIconUrl(newsBean.icon_url); return convertView; } }}
package com.itheima74.newsnet.domain;/** * Created by My on 2017/2/12. */public class NewsBean { public int _id; public String title; public String des; public String news_url; public String icon_url; public String time; public int type; public int commont; @Override public String toString() { return "NewsBean{" + "_id=" + _id + ", title='" + title + '\'' + ", des='" + des + '\'' + ", news_url='" + news_url + '\'' + ", icon_url='" + icon_url + '\'' + ", time='" + time + '\'' + ", type=" + type + ", commont=" + commont + '}'; }}
package com.itheima74.newsnet.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/**MySqlitOpenHelp * Created by My on 2017/2/12. */class MySqlitOpenHelp extends SQLiteOpenHelper { MySqlitOpenHelp(Context context) { super(context, "heimanews", null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { String sql = "create table news(_id integer primary key,title varchar(100),des varchar(100)," + "news_url varchar(100),icon_url varchar(100),time varchar(100),type integer,comment integer)"; sqLiteDatabase.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { }}
package com.itheima74.newsnet.dao;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.itheima74.newsnet.domain.NewsBean;import java.util.ArrayList;/** * 数据库增删改查类 * Created by My on 2017/2/12. */public class NewsDao { private MySqlitOpenHelp mSqlitOpenHelp; public NewsDao(Context context) { mSqlitOpenHelp = new MySqlitOpenHelp(context); } public void insert(ArrayList<NewsBean> netNewsList) { SQLiteDatabase db = mSqlitOpenHelp.getReadableDatabase(); for (NewsBean newsBean:netNewsList) { ContentValues values = new ContentValues(); values.put("_id",newsBean._id); values.put("title",newsBean.title); values.put("des",newsBean.des); values.put("news_url",newsBean.news_url); values.put("icon_url",newsBean.icon_url); values.put("time",newsBean.time); values.put("type",newsBean.type); values.put("comment",newsBean.commont); db.insert("news",null,values); } db.close(); } /** * 清空数据库所有数据的方法 */ public void delete() { SQLiteDatabase db = mSqlitOpenHelp.getReadableDatabase(); db.delete("news", null, null); db.close(); } /** * 查询数据库所有数据的方法,有多少查多少 * * @return 数据库所有新闻数据集合 */ public ArrayList<NewsBean> query() { ArrayList<NewsBean> allLocalList = new ArrayList<>(); SQLiteDatabase db = mSqlitOpenHelp.getReadableDatabase(); Cursor cursor = db.query("news", null, null, null, null, null, null); if (cursor != null && cursor.getCount() > 0) { while (cursor.moveToNext()) { NewsBean newsBean = new NewsBean(); newsBean._id = cursor.getInt(0); newsBean.title = cursor.getString(1); newsBean.des = cursor.getString(2); newsBean.news_url = cursor.getString(3); newsBean.icon_url = cursor.getString(4); newsBean.time = cursor.getString(5); newsBean.type = cursor.getInt(6); newsBean.commont = cursor.getInt(7); allLocalList.add(newsBean); } } db.close(); cursor.close(); return allLocalList; }}
package com.itheima74.newsnet.utils;import android.content.Context;import com.itheima74.newsnet.dao.NewsDao;import com.itheima74.newsnet.domain.NewsBean;import org.json.JSONArray;import org.json.JSONObject;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;/** * 去网络获取所有新闻数据 * Created by My on 2017/2/12. */public class NewsUtil { public static ArrayList<NewsBean> getNetNewsList(ArrayList<NewsBean> localList,Context context) { ArrayList<NewsBean> netNewsList = new ArrayList<>(); String news_path = "http://10.0.2.2:8080/news.json"; try { URL url = new URL(news_path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(1000 * 5); int responseCode = conn.getResponseCode(); if (responseCode == 200) { InputStream inputStream = conn.getInputStream(); String result = StreamUtil.stream2String(inputStream); System.out.println("result:"+result); // json数据解析 JSONObject jsonObject_root = new JSONObject(result); JSONArray jsonArray = jsonObject_root.getJSONArray("newss"); for (int i = 0; i < jsonArray.length(); i++) { NewsBean newsBean = new NewsBean(); JSONObject news = jsonArray.getJSONObject(i); newsBean._id = news.getInt("id"); newsBean.time = news.getString("time"); newsBean.des = news.getString("des"); newsBean.title = news.getString("title"); newsBean.news_url = news.getString("news_url"); newsBean.icon_url = news.getString("icon_url"); newsBean.commont = news.getInt("comment"); newsBean.type = news.getInt("type"); netNewsList.add(newsBean); } } } catch (Exception e) { e.printStackTrace(); } // 获取到数据本地数据库保存一份,获取到新数据才保存 if (netNewsList.size() > localList.size()) { NewsDao newsDao = new NewsDao(context); newsDao.delete(); newsDao.insert(netNewsList); } return netNewsList; }}
package com.itheima74.newsnet.utils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;/** * stream2String * Created by My on 2017/2/12. */class StreamUtil { static String stream2String(InputStream in) { String result = null; ByteArrayOutputStream baos = null; try { baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) != -1) { baos.write(buffer, 0, len); } result = baos.toString(); } catch (Exception e) { e.printStackTrace(); } finally { try { in.close(); baos.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }}
package com.itheima74.newsnet.view;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;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;/** * 自定义可加载网络图片的ImageView * Created by My on 2017/2/12. */public class MyImageView extends ImageView { private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { Bitmap bitmap = (Bitmap) msg.obj; MyImageView.this.setImageBitmap(bitmap); } }; public MyImageView(Context context) { super(context); } public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); } public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * @param path 图片url */ public void setIconUrl(final String path) { new Thread() { @Override public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(1000 * 5); int responseCode = conn.getResponseCode(); if (responseCode == 200) { InputStream inputStream = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); Message message = Message.obtain(); message.obj = bitmap; mHandler.sendMessage(message); } } catch (Exception e) { e.printStackTrace(); } } }.start(); }}
0 0
- 新闻案例网络版(listview实现)
- 新闻案例本地版(listview实现)
- 新闻网络版
- 实现案例新闻客户端
- ListView实现看新闻
- 新闻案例
- 新闻案例
- 新闻案例
- android listview实现新闻列表展示效果
- 新闻集团正式对《泰晤士报》网络版收费
- Android案例之新闻客户端服务器实现,完全属于自己的新闻展示平台Android案例之新闻客户端服务器实现,完全属于自己的新闻展示平台
- 使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能
- windows网络版象棋的实现
- Android案例之新闻客户端服务器实现,完全属于自己的新闻展示平台
- Android实现的ListView-ListViewAdapter(新闻列表事例)
- Android中通过ListView的实现简单新闻列表
- Android中通过ListView的实现简单新闻列表
- 2017.08.16ListView实现新闻案列(没有连数据库)
- Hibernate 添加数据 一 (一对多)
- 《ACM程序设计》书中题目 M
- 泛型(generic paradigm)-methods
- 2030
- 游戏策划创意设计
- 新闻案例网络版(listview实现)
- Java动态代理实现
- 【Rsync项目实战】备份全网服务器数据
- Appium for Win7 环境搭建
- Hibernate 添加数据 二 (多对多)
- 最小生成树模版题
- C++四种类型转换
- C++多态之动态绑定
- 构建高并发高可用的电商平台架构实践3