导依赖包:
compile 'org.greenrobot:greendao:3.2.2' // add library //fresco加载图片 compile 'com.facebook.fresco:fresco:1.5.0' //eventbus compile 'org.greenrobot:eventbus:3.1.1' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' //retrofit网络加载框架 compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' //butterknife compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
adapter——MyAdapter
package com.example.week01.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.week01.R; import com.example.week01.bean.UserBean; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; /** * Created by Administrator on 2017/12/2. */ public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { List<UserBean> list; Context context; public MyAdapter(List<UserBean> list, Context context) { this.list = list; this.context = context; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Fresco.initialize(context); //加载视图 View view=View.inflate(context, R.layout.iten_rec,null); return new MyViewHolder(view); } class MyViewHolder extends RecyclerView.ViewHolder { SimpleDraweeView img; TextView name; TextView msg; TextView time; public MyViewHolder(View itemView) { super(itemView); //初始化控件 img=itemView.findViewById(R.id.sdv); name=itemView.findViewById(R.id.name); msg=itemView.findViewById(R.id.msg); time=itemView.findViewById(R.id.times); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { UserBean resultsBean=list.get(position); MyViewHolder myViewHolder= (MyViewHolder) holder; myViewHolder.name.setText(resultsBean.getType()); myViewHolder.msg.setText(resultsBean.getDes()); myViewHolder.time.setText(resultsBean.getPublishedAt()+""); } @Override public int getItemCount() { return list.size(); } }
adapter——RecAdapterpackage com.example.week01.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.week01.R; import com.example.week01.bean.LogBean; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; /** * Created by Administrator on 2017/12/2. */ public class RecAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { List<LogBean.ResultsBean> list; Context context; public RecAdapter(List<LogBean.ResultsBean> list, Context context) { this.list = list; this.context = context; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Fresco.initialize(context); //加载视图 View view=View.inflate(context, R.layout.iten_rec,null); return new MyViewHolder(view); } class MyViewHolder extends RecyclerView.ViewHolder { SimpleDraweeView img; TextView name; TextView msg; TextView time; public MyViewHolder(View itemView) { super(itemView); //初始化控件 img=itemView.findViewById(R.id.sdv); name=itemView.findViewById(R.id.name); msg=itemView.findViewById(R.id.msg); time=itemView.findViewById(R.id.times); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { LogBean.ResultsBean resultsBean=list.get(position); MyViewHolder myViewHolder= (MyViewHolder) holder; if(resultsBean.getImages()!=null) { myViewHolder.img.setImageURI(resultsBean.getImages().get(0)); } myViewHolder.name.setText(resultsBean.getType()); myViewHolder.msg.setText(resultsBean.getDesc()); myViewHolder.time.setText(resultsBean.getPublishedAt()+""); } @Override public int getItemCount() { return list.size(); } }
bean——LogBeanpackage com.example.week01.bean; import java.util.List; /** * Created by Administrator on 2017/12/2. */ public class LogBean { private boolean error; private List<ResultsBean> results; public boolean isError() { return error; } public void setError(boolean error) { this.error = error; } public List<ResultsBean> getResults() { return results; } public void setResults(List<ResultsBean> results) { this.results = results; } public static class ResultsBean { private String _id; private String createdAt; private String desc; private String publishedAt; private String source; private String type; private String url; private boolean used; private String who; private List<String> images; public ResultsBean(String _id, String createdAt, String desc, String publishedAt, String source, String type, String url, boolean used, String who, List<String> images) { this._id = _id; this.createdAt = createdAt; this.desc = desc; this.publishedAt = publishedAt; this.source = source; this.type = type; this.url = url; this.used = used; this.who = who; this.images = images; } public String get_id() { return _id; } public void set_id(String _id) { this._id = _id; } public String getCreatedAt() { return createdAt; } public void setCreatedAt(String createdAt) { this.createdAt = createdAt; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getPublishedAt() { return publishedAt; } public void setPublishedAt(String publishedAt) { this.publishedAt = publishedAt; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public boolean isUsed() { return used; } public void setUsed(boolean used) { this.used = used; } public String getWho() { return who; } public void setWho(String who) { this.who = who; } public List<String> getImages() { return images; } public void setImages(List<String> images) { this.images = images; } } }
bean——NetBeanpackage com.example.week01.bean; /** * Created by Administrator on 2017/12/2. */ public class NetBean { String netzhuan; public String getNetzhuan() { return netzhuan; } public void setNetzhuan(String netzhuan) { this.netzhuan = netzhuan; } }
bean——UserBeanpackage com.example.week01.bean; import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Generated; /** * Created by Administrator on 2017/12/2. */ @Entity public class UserBean { @Id(autoincrement =true) Long id; private String publishedAt; private String des; private String type; @Generated(hash = 1903720241) public UserBean(Long id, String publishedAt, String des, String type) { this.id = id; this.publishedAt = publishedAt; this.des = des; this.type = type; } @Generated(hash = 1203313951) public UserBean() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getPublishedAt() { return this.publishedAt; } public void setPublishedAt(String publishedAt) { this.publishedAt = publishedAt; } public String getDes() { return this.des; } public void setDes(String des) { this.des = des; } public String getType() { return this.type; } public void setType(String type) { this.type = type; } }
fragment——fragment01package com.example.week01.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.example.week01.GreenDaoHelper; import com.example.week01.R; import com.example.week01.adapter.MyAdapter; import com.example.week01.adapter.RecAdapter; import com.example.week01.bean.DaoSession; import com.example.week01.bean.LogBean; import com.example.week01.bean.NetBean; import com.example.week01.bean.UserBean; import com.example.week01.utils.NetListener; import com.example.week01.utils.RetrofitHepler; import com.example.week01.utils.ServerApi; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * Created by Administrator on 2017/12/2. */ public class fragment01 extends Fragment { ServerApi serverApi; RecAdapter adapter; @BindView(R.id.rec) RecyclerView mRec; private View view; private Unbinder unbinder; private DaoSession session; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注册 EventBus.getDefault().register(this); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //加载视图 View view = View.inflate(getActivity(), R.layout.fragment01, null); session= GreenDaoHelper.getDaoSession(getActivity()); unbinder = ButterKnife.bind(this, view); mRec.setLayoutManager(new LinearLayoutManager(getContext())); //创建ServerApi对象 serverApi = RetrofitHepler.getServerApi(); if(!new NetListener().isNetworkConnected(getActivity())) { /** * 无网状态下 */ //查询记录 List<UserBean> areas = session.getUserBeanDao().loadAll(); MyAdapter myAdapter=new MyAdapter(areas,getActivity()); mRec.setAdapter(myAdapter); } else { Toast.makeText(getActivity(),"有网",Toast.LENGTH_LONG).show(); Call<LogBean> logBeanCall = serverApi.logBeanCall(); logBeanCall.enqueue(new Callback<LogBean>() { @Override public void onResponse(Call<LogBean> call, Response<LogBean> response) { //请求成功 final LogBean logBean = response.body(); getActivity().runOnUiThread(new Runnable() { @Override public void run() { //实例化适配器 adapter = new RecAdapter(logBean.getResults(), getActivity()); mRec.setAdapter(adapter); //存值到数据库 for(int i=0;i<logBean.getResults().size();i++) { LogBean.ResultsBean r=logBean.getResults().get(i); UserBean userBean=new UserBean(System.currentTimeMillis(),r.getPublishedAt(),r.getDesc(),r.getType()); session.insert(userBean); } } }); } @Override public void onFailure(Call<LogBean> call, Throwable t) { } }); } return view; } @Subscribe public void isNetWork(NetBean netBean) { Toast.makeText(getContext(), netBean.getNetzhuan(), Toast.LENGTH_LONG).show(); //判断 if (netBean.getNetzhuan().equals("网络连接中~")) { Call<LogBean> logBeanCall = serverApi.logBeanCall(); logBeanCall.enqueue(new Callback<LogBean>() { @Override public void onResponse(Call<LogBean> call, Response<LogBean> response) { //请求成功 LogBean logBean = response.body(); } @Override public void onFailure(Call<LogBean> call, Throwable t) { } }); } } //销毁防止内存泄露 @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); EventBus.getDefault().unregister(this); } }
fragment——fragment02package com.example.week01.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.week01.R; /** * Created by Administrator on 2017/12/2. */ public class fragment02 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=View.inflate(getActivity(), R.layout.fragment02,null); return view; } }
fragment——fragment03package com.example.week01.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.week01.R; /** * Created by Administrator on 2017/12/2. */ public class fragment03 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=View.inflate(getActivity(), R.layout.fragment03,null); return view; } }
utils——Apppackage com.example.week01.utils; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; /** * Created by Administrator on 2017/12/2. */ public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
utils——NetListenerpackage com.example.week01.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; /** * Created by Administrator on 2017/12/2. * 网络状态判断工具类 */ public class NetListener { public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; } }
utils——RetrofitHeplerpackage com.example.week01.utils; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by Administrator on 2017/12/2. */ public class RetrofitHepler { public static OkHttpClient okHttpClient; public static ServerApi serverApi; static { initOkHttpClent(); } //初始化OkHttpClient public static void initOkHttpClent() { if(okHttpClient==null) { synchronized (RetrofitHepler.class) { if(okHttpClient==null) { okHttpClient=new OkHttpClient(); } } } } public static ServerApi getServerApi() { if(serverApi==null) { synchronized (ServerApi.class) { if(serverApi==null) { serverApi=OnCreatApi(ServerApi.class,UrlApi.HOST_URL); } } } return serverApi; } //定义方法初始化ServerApi public static<T> T OnCreatApi(Class<T> tClass,String url) { Retrofit retrofit=new Retrofit .Builder().baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .build(); return retrofit.create(tClass); } }
utils——ServerApipackage com.example.week01.utils; import com.example.week01.bean.LogBean; import retrofit2.Call; import retrofit2.http.GET; /** * Created by Administrator on 2017/12/2. */ public interface ServerApi { @GET(UrlApi.URL) Call<LogBean> logBeanCall(); }
utils——UrlApipackage com.example.week01.utils; /** * Created by Administrator on 2017/12/2. */ public class UrlApi { public static final String HOST_URL="http://gank.io/api/data/Android/"; public static final String URL="10/1"; }
GreenDaoHelperpackage com.example.week01; import android.app.Application; import android.content.Context; import android.content.ContextWrapper; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import com.example.week01.bean.DaoMaster; import com.example.week01.bean.DaoSession; import com.facebook.drawee.backends.pipeline.Fresco; import java.io.File; import java.io.IOException; /** * Created by Administrator on 2017/12/2. */ public class GreenDaoHelper extends Application { private GreenDaoHelper Instance; private static DaoMaster daoMaster; private static DaoSession daoSession; public GreenDaoHelper getInstance() { if (Instance == null) { Instance = this; } return Instance; } @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } /** * 获取DaoMaster * * @param context * @return */ public static DaoMaster getDaoMaster(Context context) { if (daoMaster == null) { try{ ContextWrapper wrapper = new ContextWrapper(context) { /** * 获得数据库路径,如果不存在,则创建对象对象 * * @param name */ @Override public File getDatabasePath(String name) { // 判断是否存在sd卡 boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState()); if (!sdExist) {// 如果不存在, Log.e("SD卡管理:", "SD卡不存在,请加载SD卡"); return null; } else {// 如果存在 // 获取sd卡路径 String dbDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath(); dbDir += "/Android";// 数据库所在目录 String dbPath = dbDir + "/" + name;// 数据库路径 // 判断目录是否存在,不存在则创建该目录 File dirFile = new File(dbDir); if (!dirFile.exists()) dirFile.mkdirs(); // 数据库文件是否创建成功 boolean isFileCreateSuccess = false; // 判断文件是否存在,不存在则创建该文件 File dbFile = new File(dbPath); if (!dbFile.exists()) { try { isFileCreateSuccess = dbFile.createNewFile();// 创建文件 } catch (IOException e) { e.printStackTrace(); } } else isFileCreateSuccess = true; // 返回数据库文件对象 if (isFileCreateSuccess) return dbFile; else return super.getDatabasePath(name); } } /** * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。 * * @param name * @param mode * @param factory */ @Override public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) { return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null); } /** * Android 4.0会调用此方法获取数据库。 * * @see ContextWrapper#openOrCreateDatabase(String, * int, * SQLiteDatabase.CursorFactory, * DatabaseErrorHandler) * @param name * @param mode * @param factory * @param errorHandler */ @Override public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) { return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null); } }; DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(wrapper,"test.db",null); daoMaster = new DaoMaster(helper.getWritableDatabase()); //获取未加密的数据库 }catch (Exception e){ e.printStackTrace(); } } return daoMaster; } /** * 获取DaoSession对象 * * @param context * @return */ public static DaoSession getDaoSession(Context context) { if (daoSession == null) { if (daoMaster == null) { getDaoMaster(context); } daoSession = daoMaster.newSession(); } return daoSession; } }
MainActivitypackage com.example.week01; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.RadioButton; import com.example.week01.bean.NetBean; import com.example.week01.fragment.fragment01; import com.example.week01.fragment.fragment02; import com.example.week01.fragment.fragment03; import com.example.week01.fragment.fragment04; import com.example.week01.fragment.fragment05; import com.example.week01.utils.NetListener; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { @BindView(R.id.flt) ViewPager mFlt; @BindView(R.id.shouye) RadioButton mShouye; @BindView(R.id.xf) RadioButton mXf; @BindView(R.id.sc) RadioButton mSc; @BindView(R.id.tt) RadioButton mTt; @BindView(R.id.gd) RadioButton mGd; List<Fragment> fragments; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); fragments=new ArrayList<>(); fragments.add(new fragment01()); fragments.add(new fragment02()); fragments.add(new fragment03()); fragments.add(new fragment04()); fragments.add(new fragment05()); mFlt.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } }); mFlt.setCurrentItem(0); NetBean netBean=new NetBean(); if(!new NetListener().isNetworkConnected(MainActivity.this)) { netBean.setNetzhuan("当前没网!!!"); } else { netBean.setNetzhuan("网络连接中~"); } EventBus.getDefault().post(netBean); } @OnClick({R.id.flt, R.id.shouye, R.id.xf, R.id.sc, R.id.tt, R.id.gd}) public void onClick(View v) { switch (v.getId()) { default: break; case R.id.flt: break; case R.id.shouye: mFlt.setCurrentItem(0);//显示页面 break; case R.id.xf: mFlt.setCurrentItem(1); break; case R.id.sc: mFlt.setCurrentItem(2); break; case R.id.tt: mFlt.setCurrentItem(3); break; case R.id.gd: mFlt.setCurrentItem(4); break; } } @Override protected void onDestroy() { super.onDestroy(); // EventBus.getDefault().unregister(this); } }
activity_main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical"> <android.support.v4.view.ViewPager android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="9" android:id="@+id/flt" /> <RadioGroup android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" > <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="首页" android:button="@null" android:id="@+id/shouye"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:gravity="center" android:layout_weight="1" android:text="想法" android:button="@null" android:id="@+id/xf"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:gravity="center" android:layout_weight="1" android:text="市场" android:button="@null" android:id="@+id/sc"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:gravity="center" android:layout_weight="1" android:text="通知" android:button="@null" android:id="@+id/tt"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:gravity="center" android:layout_weight="1" android:text="更多" android:button="@null" android:id="@+id/gd"/> </RadioGroup> </LinearLayout>
fragment01.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rec"></android.support.v7.widget.RecyclerView> </LinearLayout>
fragment02.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="想法" /> </LinearLayout>
iten_rec.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="30dp" android:layout_height="30dp" android:id="@+id/sdv" fresco:placeholderImage="@mipmap/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/name"/> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:id="@+id/msg"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/times"/> </LinearLayout>
AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.week01"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>