依赖
implementation 'com.facebook.fresco:fresco:1.10.0'
implementation 'com.android.support:recyclerview-v7:27.1.1'
//butterknife
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.jakewharton:butterknife:8.8.1'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'org.greenrobot:eventbus:3.0.0'
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.4'
implementation files('libs/gson-2.8.0.jar')
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
activity_main布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="200dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:gravity="center"
android:background="@drawable/gzq"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Good Morning"
android:gravity="center"
android:id="@+id/biaoti"
android:textColor="#80CE33"
android:textSize="30dp"
/>
<com.facebook.drawee.view.SimpleDraweeView
app:placeholderImage="@drawable/d"
android:id="@+id/photo"
app:actualImageScaleType="centerCrop"
app:roundAsCircle="true"
android:layout_width="50dp"
android:layout_height="50dp" />
</LinearLayout>
activity_main2布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:layout_width="match_parent"
android:id="@+id/smart"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recy_view"
/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</LinearLayout>
recy_layout布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="200dp"
android:layout_height="200dp"
android:gravity="center"
app:placeholderImage="@drawable/ic_launcher_background"
android:id="@+id/simple"
app:roundAsCircle="true"
app:actualImageScaleType="centerCrop"
/>
</LinearLayout>
adapter-MyRecyAdapter类
public class MyRecyAdapter extends RecyclerView.Adapter<MyRecyAdapter.TextViewHolder> {
private Context context;
private List<FlBean.ResultsBean> resultsBeans;
private View inflate;
public MyRecyAdapter(Context context, List<FlBean.ResultsBean> resultsBeans) {
this.context = context;
this.resultsBeans = resultsBeans;
}
@NonNull
@Override
public MyRecyAdapter.TextViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
inflate = LayoutInflater.from(context).inflate(R.layout.recy_layout, null);
return new TextViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull TextViewHolder holder, final int position) {
holder.simple.setImageURI(resultsBeans.get(position).getUrl());
inflate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemCallBack.itemclick(position);
}
});
insertdata(resultsBeans.get(position).getDesc());
}
//添加方法
private void insertdata(String time) {
GerrnDao hh = new GerrnDao(null, time);
getGreendao().insert(hh);
}
//获取实体类对象
private GerrnDaoDao getGreendao(){
return GreenDaoManager.getInstance().getSession().getGerrnDaoDao();
}
@Override
public int getItemCount() {
return resultsBeans.size();
}
public class TextViewHolder extends RecyclerView.ViewHolder {
private final SimpleDraweeView simple;
/*@BindView(R.id.simple)
SimpleDraweeView simple;*/
public TextViewHolder(View itemView) {
super(itemView);
simple = itemView.findViewById(R.id.simple);
}
}
/**
* 定义一个借口用来回调点击事件
*/
public interface ItemCallBack{
void itemclick(int position);
}
private ItemCallBack itemCallBack;
public void setItemCallBack(ItemCallBack itemCallBack) {
this.itemCallBack = itemCallBack;
}
}
app-GreenDaoManager类
public class GreenDaoManager {
private DaoMaster.DevOpenHelper devopenhelpers;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
private static GreenDaoManager mInstance; //单例
private GreenDaoManager(){
if (mInstance == null) {
//初始化DaoMaster创建表名
devopenhelpers = new DaoMaster.DevOpenHelper(MyApp.getContext(),"users",null);
//通过DaoMaster获取ssions
DaoMaster mDaoMaster=new DaoMaster(devopenhelpers.getWritableDb());
mDaoSession = mDaoMaster.newSession();
}
}
public static GreenDaoManager getInstance() {
if (mInstance == null) {
synchronized (GreenDaoManager.class) {//保证异步处理安全操作
if (mInstance == null) {
//初始化DAO管理方法
mInstance = new GreenDaoManager();//懒汉
}
}
}
return mInstance;
}
public DaoMaster getMaster() {
return mDaoMaster;
}
public DaoSession getSession() {
return mDaoSession;
}
public DaoSession getNewSession() {
mDaoSession = mDaoMaster.newSession();
return mDaoSession;
}
}
app-My2App类
public class My2App extends Application {
private static Context mcontext;
@Override
public void onCreate() {
super.onCreate();
mcontext = getApplicationContext();
}
public static Context getContext(){
return mcontext;
}
}
app-MyApp类
public class MyApp extends Application {
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
//greenDao全局配置,只希望有一个数据库操作对象
GreenDaoManager.getInstance();
}
public static Context getContext() {
return mContext;
}
}
greendao-DaoMaster类
public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 1;
/** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) {
GerrnDaoDao.createTable(db, ifNotExists);
}
/** Drops underlying database table using DAOs. */
public static void dropAllTables(Database db, boolean ifExists) {
GerrnDaoDao.dropTable(db, ifExists);
}
/**
* WARNING: Drops all table on Upgrade! Use only during development.
* Convenience method using a {@link DevOpenHelper}.
*/
public static DaoSession newDevSession(Context context, String name) {
Database db = new DevOpenHelper(context, name).getWritableDb();
DaoMaster daoMaster = new DaoMaster(db);
return daoMaster.newSession();
}
public DaoMaster(SQLiteDatabase db) {
this(new StandardDatabase(db));
}
public DaoMaster(Database db) {
super(db, SCHEMA_VERSION);
registerDaoClass(GerrnDaoDao.class);
}
public DaoSession newSession() {
return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
}
public DaoSession newSession(IdentityScopeType type) {
return new DaoSession(db, type, daoConfigMap);
}
/**
* Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
*/
public static abstract class OpenHelper extends DatabaseOpenHelper {
public OpenHelper(Context context, String name) {
super(context, name, SCHEMA_VERSION);
}
public OpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory, SCHEMA_VERSION);
}
@Override
public void onCreate(Database db) {
Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
createAllTables(db, false);
}
}
/** WARNING: Drops all table on Upgrade! Use only during development. */
public static class DevOpenHelper extends OpenHelper {
public DevOpenHelper(Context context, String name) {
super(context, name);
}
public DevOpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
dropAllTables(db, true);
onCreate(db);
}
}
}
greendao-DaoSession类
public class DaoSession extends AbstractDaoSession {
private final DaoConfig gerrnDaoDaoConfig;
private final GerrnDaoDao gerrnDaoDao;
public DaoSession(Database db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig>
daoConfigMap) {
super(db);
gerrnDaoDaoConfig = daoConfigMap.get(GerrnDaoDao.class).clone();
gerrnDaoDaoConfig.initIdentityScope(type);
gerrnDaoDao = new GerrnDaoDao(gerrnDaoDaoConfig, this);
registerDao(GerrnDao.class, gerrnDaoDao);
}
public void clear() {
gerrnDaoDaoConfig.clearIdentityScope();
}
public GerrnDaoDao getGerrnDaoDao() {
return gerrnDaoDao;
}
}
greendao-GerrnDaoDao类
public class GerrnDaoDao extends AbstractDao<GerrnDao, Long> {
public static final String TABLENAME = "GERRN_DAO";
/**
* Properties of entity GerrnDao.<br/>
* Can be used for QueryBuilder and for referencing column names.
*/
public static class Properties {
public final static Property Id = new Property(0, Long.class, "id", true, "_id");
public final static Property Name = new Property(1, String.class, "name", false, "NAME");
}
public GerrnDaoDao(DaoConfig config) {
super(config);
}
public GerrnDaoDao(DaoConfig config, DaoSession daoSession) {
super(config, daoSession);
}
/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "\"GERRN_DAO\" (" + //
"\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
"\"NAME\" TEXT NOT NULL );"); // 1: name
}
/** Drops the underlying database table. */
public static void dropTable(Database db, boolean ifExists) {
String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"GERRN_DAO\"";
db.execSQL(sql);
}
@Override
protected final void bindValues(DatabaseStatement stmt, GerrnDao entity) {
stmt.clearBindings();
Long id = entity.getId();
if (id != null) {
stmt.bindLong(1, id);
}
stmt.bindString(2, entity.getName());
}
@Override
protected final void bindValues(SQLiteStatement stmt, GerrnDao entity) {
stmt.clearBindings();
Long id = entity.getId();
if (id != null) {
stmt.bindLong(1, id);
}
stmt.bindString(2, entity.getName());
}
@Override
public Long readKey(Cursor cursor, int offset) {
return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
}
@Override
public GerrnDao readEntity(Cursor cursor, int offset) {
GerrnDao entity = new GerrnDao( //
cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
cursor.getString(offset + 1) // name
);
return entity;
}
@Override
public void readEntity(Cursor cursor, GerrnDao entity, int offset) {
entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
entity.setName(cursor.getString(offset + 1));
}
@Override
protected final Long updateKeyAfterInsert(GerrnDao entity, long rowId) {
entity.setId(rowId);
return rowId;
}
@Override
public Long getKey(GerrnDao entity) {
if(entity != null) {
return entity.getId();
} else {
return null;
}
}
@Override
public boolean hasKey(GerrnDao entity) {
return entity.getId() != null;
}
@Override
protected final boolean isEntityUpdateable() {
return true;
}
}
model-DataModel类
public interface DataModel {
void RequestApiSuccess(String json);
}
model-DataModeli类
public class DataModeli {
/**
* 创建一个请求数据的方法
*/
public void getApiData(final DataModel dataListener) {
OkhttpUtils.Doget("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1", new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
dataListener.RequestApiSuccess(json);
}
});
}
}
presenter-DataPresenter类
public interface DataPresenter {
//解绑
void destroy();
}
presenter-DataPresenteri类
public class DataPresenteri {
private Main2View main2View;
private DataModeli dataModeli;
public DataPresenteri(Main2View main2View) {
this.main2View = main2View;
this.dataModeli = new DataModeli();
}
//在p层创建创建一个中间过度的方法
public void getData(){
dataModeli.getApiData(new DataModel() {
@Override
public void RequestApiSuccess(String json) {
//接口回调到m层
main2View.getDataScuuess(json);
}
});
}
}
ok-OkhttpUtils类
public class OkhttpUtils {
private static OkHttpClient client = null;
/**
* 懒汉式单例模式
* @return
*/
public static OkHttpClient getInstance()
{
if (client == null) {
synchronized (OkhttpUtils.class) {
if (client == null) {
client = new OkHttpClient();
}
}
}
return client;
}
private OkhttpUtils() {
}
/**
* doget异步请求数据
*/
public static void Doget(String url, Callback callback) {
Request request = new Request
.Builder()
.url(url)
.build();
Call call = getInstance().newCall(request);
call.enqueue(callback);
}
}
view-MainActivity类
public class MainActivity extends AppCompatActivity {
@BindView(R.id.photo)
SimpleDraweeView photo;
@BindView(R.id.biaoti)
TextView biaoti;
@Override
protected void onCreate(Bundle savedInstanceState) {
Fresco.initialize(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//注册
EventBus.getDefault().register(this);
List<FlBean.ResultsBean> results= new FlBean().getResults();
// insertdata();
getuserById();
}
//获取实体类对象
private GerrnDaoDao getGreendao(){
return GreenDaoManager.getInstance().getSession().getGerrnDaoDao();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void RequestData(MessageBean messageBean) {
photo.setImageURI(messageBean.getImag());
biaoti.setText(messageBean.getShijnian());
}
//查询方法
private void getuserById() {
List<GerrnDao> gerrnDaos = getGreendao().loadAll();
for (int i = 0; i < gerrnDaos.size(); i++) {
Log.i("fff", "结果"+gerrnDaos.get(i).getName());
}
}
@OnClick(R.id.photo)
public void onViewClicked() {
startActivity(new Intent(MainActivity.this, Main2Activity.class));
}
}
view-Main2Activity类
public class Main2Activity extends AppCompatActivity implements Main2View {
@BindView(R.id.recy_view)
RecyclerView recyView;
@BindView(R.id.smart)
SmartRefreshLayout smart;
private Gson gson;
private FlBean.ResultsBean resultsBean;
private List<FlBean.ResultsBean> results;
private MyRecyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ButterKnife.bind(this);
recyView.setLayoutManager(new LinearLayoutManager(this));
DataPresenteri dataPresenteri = new DataPresenteri(this);
dataPresenteri.getData();
gson = new Gson();
}
@Override
public void getDataScuuess(String json) {
FlBean flBean = gson.fromJson(json, FlBean.class);
results = flBean.getResults();
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter = new MyRecyAdapter(Main2Activity.this, results);
recyView.setAdapter(adapter);
adapter.setItemCallBack(new MyRecyAdapter.ItemCallBack() {
@Override
public void itemclick(int position) {
EventBus.getDefault().post(new MessageBean(results.get(position).getUrl(),results.get(position).getDesc()));
finish();
}
});
}
});
//设置适配器
}
}
view-Main2view类
public interface Main2View {
//从网络请求数据成功
void getDataScuuess(String json);
}
bean-GerrnDao类
@Entity
public class GerrnDao {
@Id(autoincrement = true)
private Long id;
@NotNull
private String name;
@Transient
private int tempUsageCount; // not persisted
@Generated(hash = 1689046392)
public GerrnDao(Long id, @NotNull String name) {
this.id = id;
this.name = name;
}
@Generated(hash = 1549467921)
public GerrnDao() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
bean-MessageBean类
public class MessageBean {
private String imag;
private String shijnian;
public MessageBean(String imag, String shijnian) {
this.imag = imag;
this.shijnian = shijnian;
}
public String getImag() {
return imag;
}
public void setImag(String imag) {
this.imag = imag;
}
public String getShijnian() {
return shijnian;
}
public void setShijnian(String shijnian) {
this.shijnian = shijnian;
}
}
bean-FlBean类