import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.view.View;
import com.bawei.adapter.MyFragmentAdapter;
import com.bawei.fragment.MyFragment;
import com.bawei.fragment.ShouyeFragment;
import java.util.ArrayList;
import java.util.List;
/**
* 首先这是第一个页面
* DrawerLayout侧拉
* ViewPager+TabLayout切换页面
* 写抽积类BaseActivity
*/
public class MainActivity extends BaseActivity {
private DrawerLayout drawerLayout;
private TabLayout tabLayout;
private ViewPager viewPager;
private String[] titles = {"首页","我的"};
private List<Fragment> list = new ArrayList<>();
//初始化布局
@Override
public int initLayout() {
return R.layout.activity_main;
}
//初始化控件
@Override
public void initView() {
drawerLayout = fvbi(R.id.drawerlayout);
tabLayout = fvbi(R.id.tablayout);
viewPager = fvbi(R.id.viewpager);
//侧拉
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
//初始化数据
@Override
public void initData() {
//
list.add(new ShouyeFragment());
list.add(new MyFragment());
//创建适配器
MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(),list,titles);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
@Override
public void onClick(View v) {
}
}
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
/**
* @Author: zhang
* @Date: 2019/2/27 19:06
* @Description:抽积类BaseActivity
*/
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局
setContentView(initLayout());
//加载控件
initView();
//加载数据
initData();
}
//初始化布局
public abstract int initLayout();
//初始化控件
public abstract void initView();
//初始化数据
public abstract void initData();
//findViewById
public <T extends View> T fvbi(int resId){
return (T) findViewById(resId);
}
}
import android.content.Context;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import com.bawei.adapter.MyAdapter;
import com.bawei.bean.FuliBean;
import com.bawei.bean.ResultsBean;
import com.bawei.dao.SqlDao;
import com.bawei.util.HttpUtil;
import com.bawei.zcr.R;
import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.youth.banner.Banner;
import com.youth.banner.loader.ImageLoader;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zhang
* @Date: 2019/2/27 19:48
* @Description:首页
* HttpUrlConnection进行数据请求、图片请求;
* Banner轮播
* Asynctask进行异步处理;
* Json解析
* PullToRefresh进行优化展示且完成上拉下拉效果
*/
public class ShouyeFragment extends BaseFragment {
private List<ResultsBean> beanList = new ArrayList<>();
private PullToRefreshListView pullList;
private List<String> list = new ArrayList<>();
private Banner banner;
private int page = 0;
private String url = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";
private MyAdapter adapter;
private SqlDao dao;
//初始化布局
@Override
public int initLayout() {
return R.layout.shouye_fragment;
}
//初始化控件
@Override
protected void initView() {
banner = fvbi(R.id.banner);
pullList = fvbi(R.id.pullList);
//支持上拉下拉
pullList.setMode(PullToRefreshBase.Mode.BOTH);
//支持刷新中支持滚动
pullList.setScrollingWhileRefreshingEnabled(true);
}
//初始化数据
@Override
public void initData() {
//创建数据库工具类
dao = new SqlDao(getActivity());
//轮播
setBanner();
//创建适配器
adapter = new MyAdapter(getActivity(),beanList);
pullList.setAdapter(adapter);
//判断网络
if (HttpUtil.isNetConnected(getActivity())){
//有网
//加载数据
getMyData(page);
}else {
//没网
Toast.makeText(getActivity(), "请检查网络连接", Toast.LENGTH_SHORT).show();
//查询数据库
String s = dao.selectData(url + page);
jsonParse(s);
}
}
private void getMyData(int p) {
final String dataUrl = url + p;
HttpUtil.MyTask(dataUrl, new HttpUtil.MyCallBack() {
@Override
public Void getData(String str) {
//保存到数据库
dao.insertData(dataUrl,str);
//解析
jsonParse(str);
return null;
}
});
}
//解析
private void jsonParse(String str) {
Gson gson = new Gson();
FuliBean fromJson = gson.fromJson(str, FuliBean.class);
beanList.addAll(fromJson.getData());
//刷新适配器
adapter.notifyDataSetChanged();
//关闭刷新
pullList.onRefreshComplete();
}
//轮播
private void setBanner() {
banner.isAutoPlay(true);
banner.setDelayTime(1000);
list.add("http://ww1.sinaimg.cn/large/0065oQSqly1frja502w5xj30k80od410.jpg");
list.add("http://ww1.sinaimg.cn/large/0065oQSqly1fri9zqwzkoj30ql0w3jy0.jpg");
list.add("http://ww1.sinaimg.cn/large/0065oQSqly1frg40vozfnj30ku0qwq7s.jpg");
banner.setImages(list);
banner.setImageLoader(new ImageLoader() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load(path).into(imageView);
}
}).start();
}
//监听
@Override
public void initListener() {
pullList.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//下拉刷新
beanList.clear();
getMyData(page);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
//上拉加载数据
page++;
getMyData(page);
}
});
}
}
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* @Author: zhang
* @Date: 2019/2/27 19:49
* @Description:Fragment的抽积类
*/
public abstract class BaseFragment extends Fragment {
private Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mContext = context;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(initLayout(), container, false);
return view;
}
//初始化布局
public abstract int initLayout();
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//加载控件
initView();
}
//初始化控件
protected abstract void initView();
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//加载数据
initData();
//监听
initListener();
}
//初始化数据
public abstract void initData();
public <T extends View> T fvbi(int resId){
return (T) getView().findViewById(resId);
}
public abstract void initListener();
}
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @Author: zhang
* @Date: 2019/2/28 19:46
* @Description:HttpUrlConnection进行数据请求、图片请求的工具类
*/
public class HttpUtil {
//判断网络
public static boolean isNetConnected(Context context){
if (context != null){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info != null){
return info.isAvailable();
}
}
return false;
}
//请求数据
public static String getNetData(String dataUrl){
try {
URL url = new URL(dataUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if (code == HttpURLConnection.HTTP_OK){
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder builder = new StringBuilder();
String str = "";
while ((str = reader.readLine()) != null){
builder.append(str);
}
return builder.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
//创建接口回调
public interface MyCallBack{
Void getData(String str);
}
public static void MyTask(String url, final MyCallBack myCallBack){
new AsyncTask<String, Void, String>() {
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
myCallBack.getData(s);
}
@Override
protected String doInBackground(String... strings) {
return HttpUtil.getNetData(strings[0]);
}
}.execute(url);
}
}
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* @Author: zhang
* @Date: 2019/3/1 9:08
* @Description:数据库帮助类
*/
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) {
super(context,"bawei.db",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table news (url vahrchar,json varchar(800))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.bawei.helper.MyHelper;
/**
* @Author: zhang
* @Date: 2019/3/1 9:07
* @Description:Dao层
*/
public class SqlDao {
private MyHelper helper;
private String table = "news";
public SqlDao(Context mContext) {
helper = new MyHelper(mContext);
}
//添加数据库
public void insertData(String url,String json){
SQLiteDatabase database = helper.getWritableDatabase();
//删除原有数据,重新添加新数据
database.delete(table,"url=?",new String[]{url});
ContentValues values = new ContentValues();
values.put("url",url);
values.put("json",json);
database.insert(table,null,values);
}
//查询数据库
public String selectData(String url){
String json = "";
SQLiteDatabase database = helper.getWritableDatabase();
Cursor query = database.query(table, null, "url=?", new String[]{url}, null, null, null);
while (query.moveToNext()){
json = query.getString(query.getColumnIndex("json"));
}
return json;
}
}