1.MainActivity主界面
package com.example.week01_01;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import static com.example.week01_01.LoginActivity.URL_KEY;
public class MainActivity extends AppCompatActivity {
private ListView listView;
private NewsAdaper mAdaper;
private NewDao dao;
private List<NewsBean.Data> select;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源id
listView = findViewById(R.id.lv_list);
//穿件适配器
mAdaper = new NewsAdaper(MainActivity.this);
listView.setAdapter(mAdaper);
dao = new NewDao(MainActivity.this);
//判断网络是否可用
if(!NetUtil.hasNetWork(MainActivity.this)){
showHasNetWork();
return;
}
infoData();
}
private String ttUrl = "http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=tt";
private String gnUrl = "http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=gn";
@SuppressLint("StaticFieldLeak")
private void infoData() {
new AsyncTask<String,Void,List<NewsBean.Data>>(){
@Override
protected List<NewsBean.Data> doInBackground(String... strings) {
List<NewsBean.Data> result = new ArrayList<>();
for (String url:strings) {
NewsBean bean = NetUtil.getRequest(url, NewsBean.class);
result.addAll(bean.getResult().getData());
}
if(dao.select().size() == 0) {
for (NewsBean.Data d : result) {
String title = d.getTitle();
String date = d.getDate();
String category = d.getCategory();
dao.add(title, date,category);
}
}
select = dao.select();
return select;
}
@Override
protected void onPostExecute(List<NewsBean.Data> data) {
mAdaper.setmData(data);
}
}.execute(ttUrl,gnUrl);
}
private void showHasNetWork() {
new AlertDialog.Builder(MainActivity.this)
.setTitle("无网络")
.setMessage("当前无网络,是否去设置")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent("android.settings.WIRELESS_SETTINGS");
startActivity(intent);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
}
}
2.Bean类
package com.example.week01_01;
import java.util.List;
public class NewsBean {
public Result result;
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
public class Result{
public List<Data> data;
public List<Data> getData() {
return data;
}
public void setData(List<Data> data) {
this.data = data;
}
}
public static class Data{
public final String tt = "头条";
public String title;
public String date;
public String category;
public String thumbnail_pic_s;
public String url;
public Data(String title, String date, String category) {
this.title = title;
this.date = date;
this.category = category;
}
public String getTt() {
return tt;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getThumbnail_pic_s() {
return thumbnail_pic_s;
}
public void setThumbnail_pic_s(String thumbnail_pic_s) {
this.thumbnail_pic_s = thumbnail_pic_s;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
//判断当前条目是否是头条
public boolean isTT(){
return category.equals(tt);
}
}
}
3.适配器
package com.example.week01_01;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class NewsAdaper extends BaseAdapter {
private List<NewsBean.Data> mData;
private Context mContext;
private final int ITEM_COUNT = 2;
private final int TT_ITEM = 0;
private final int GN_ITEM = 1;
public NewsAdaper(Context mContext) {
this.mContext = mContext;
//初始化
mData = new ArrayList<>();
}
public void setmData(List<NewsBean.Data> mData) {
this.mData = mData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return getItem(position).isTT() ? TT_ITEM : GN_ITEM;
}
@Override
public int getViewTypeCount() {
return ITEM_COUNT;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public NewsBean.Data getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
getItemViewType(position) == GN_ITEM ? R.layout.gn_item : R.layout.tt_item,
parent, false);
holder = new ViewHolder(convertView);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.bind(getItem(position));
return convertView;
}
class ViewHolder {
ImageView image;
TextView title;
TextView date;
public ViewHolder(View convertView) {
title = convertView.findViewById(R.id.title);
date = convertView.findViewById(R.id.date);
image = convertView.findViewById(R.id.image);
convertView.setTag(this);
}
public void bind(NewsBean.Data item) {
title.setText(item.getTitle());
date.setText(item.getDate());
if(image!=null){
image.setImageResource(R.mipmap.ic_launcher);
}
}
}
}
4.sqliteHelper类
package com.example.week01_01;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
public class SqliteHelper extends SQLiteOpenHelper {
public SqliteHelper(@NonNull Context context) {
super(context, "New.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
db.execSQL("create table news(id integer primary key autoincrement," +
"title text," +
"date text," +
"category text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
5.dao类
package com.example.week01_01;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
public class NewDao {
private final SqliteHelper helper;
private final SQLiteDatabase sb;
public NewDao(Context context){
//创建数据库
helper = new SqliteHelper(context);
sb = helper.getReadableDatabase();
}
//添加
public void add(String title,String date,String category){
ContentValues values = new ContentValues();
values.put("title",title);
values.put("date",date);
values.put("category",category);
sb.insert("news",null,values);
}
//查询
public List<NewsBean.Data> select(){
Cursor news = sb.query("news", null, null, null, null, null, null);
List<NewsBean.Data> list = new ArrayList<>();
while (news.moveToNext()){
String title = news.getString(news.getColumnIndex("title"));
String date = news.getString(news.getColumnIndex("date"));
String category = news.getString(news.getColumnIndex("category"));
NewsBean.Data data = new NewsBean.Data(title,date,category);
list.add(data);
}
return list;
}
}
6.工具类
package com.example.week01_01;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import com.google.gson.Gson;
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;
import java.net.URLConnection;
public class NetUtil {
//是否有可用网络
public static boolean hasNetWork(Context context){
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo!=null && activeNetworkInfo.isAvailable();
}
//执行get请求 返回string结果
public static String getRequest(String urlStr){
String request = "";
try {
//定义url地址
URL url = new URL(urlStr);
//打开连接
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//设置请求方式
urlConnection.setRequestMethod("GET");
//超时
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
//获取请求码
int responseCode = urlConnection.getResponseCode();
if(responseCode == 200){
request = stream2String(urlConnection.getInputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
return request;
}
//将字节流转换为字符流
private static String stream2String(InputStream inputStream) throws IOException {
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(isr);
StringBuilder builder = new StringBuilder();
for(String tem = br.readLine();tem!=null;tem = br.readLine()){
builder.append(tem);
}
return builder.toString();
}
//执行get请求 返回Bean结果
public static <E> E getRequest(String urlStr,Class clazz){
String result = getRequest(urlStr);
E e = (E) new Gson().fromJson(result, clazz);
return e;
}
}