效果图
使用的依赖和权限
apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 27 defaultConfig { applicationId "com.bwie.test.myyuekao" minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } //为添加代码 greendao { //数据库的schema版本,也可以理解为数据库版本号 schemaVersion 1 //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。 daoPackage 'com.bwie.test.Dao' //设置DaoMaster、DaoSession、Dao目录 targetGenDir 'src/main/java' } //在代码敲完后,可能会报错的话,将这串代码粘上去,不出错可以不粘 //添加的内容 lintOptions { checkReleaseBuilds false abortOnError false } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //图片 implementation 'com.squareup.picasso:picasso:2.5.2' implementation 'com.github.bumptech.glide:glide:3.6.1' implementation 'com.facebook.fresco:fresco:1.8.1' //Imageloader implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' //butterknife implementation 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' implementation 'com.android.support:design:27+' implementation 'com.youth.banner:banner:1.4.9' implementation 'com.google.code.gson:gson:2.8.+' //okHttp 2个 implementation 'com.squareup.okhttp3:okhttp:3.6.0' implementation 'com.squareup.okio:okio:1.11.0' //rxjava implementation 'io.reactivex.rxjava2:rxjava:2.0.7' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' //retrofit implementation 'com.squareup.retrofit2:retrofit:2.1.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' implementation 'com.squareup.retrofit2:converter-gson:2.1.0' implementation 'com.squareup.retrofit2:converter-scalars:2.1.0' //一个刷新的依赖 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1' //greendao implementation 'org.greenrobot:greendao:3.2.0' implementation 'org.greenrobot:greendao-generator:3.2.0' implementation 'com.android.support:recyclerview-v7:27.1.1' }
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
build.gradle
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0' } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
activity_main
<?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" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/edit" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="搜索" /> <TextView android:id="@+id/tv_sou" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="搜搜看看" android:textSize="25dp" /> </LinearLayout> <com.bwie.test.myyuekao.FlowLayout android:id="@+id/id_flowlayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#fff" android:paddingTop="10dp"> </com.bwie.test.myyuekao.FlowLayout> <Button android:id="@+id/clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="清空记录"/> </LinearLayout>
activity_list
<?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" tools:context=".ListActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main2_recycler"> </android.support.v7.widget.RecyclerView> </LinearLayout>
activity_details
<?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" tools:context=".DetailsActivity"> <com.youth.banner.Banner android:id="@+id/main3_banner" android:layout_width="match_parent" android:layout_height="300dp"> </com.youth.banner.Banner> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击图片查看详情步骤"/> <TextView android:id="@+id/main3_textview" android:layout_width="match_parent" android:layout_weight="1" android:layout_height="match_parent" /> </LinearLayout>
recyclerview_item
<?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="wrap_content" android:orientation="horizontal"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/item_simple" android:layout_width="100dp" android:layout_height="100dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical"> <TextView android:id="@+id/item_text01" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:text="asdaw" /> <TextView android:id="@+id/item_text02" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:text="asdaw" /> </LinearLayout> </LinearLayout>
search_label_tv
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:textColor="#3f3e3e" android:textSize="14sp" android:text="Helloworld"> </TextView>
MainActivity
import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.bwie.test.utils.dayStep; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { @BindView(R.id.edit) EditText editText; @BindView(R.id.tv_sou) TextView sou; @BindView(R.id.id_flowlayout) FlowLayout mFlowlayout; @BindView(R.id.clear) Button clear; private String[] mVals = new String[]{"红烧肉","水煮白菜","水煮白菜","水煮白菜"}; private LayoutInflater mInflater; private TextView tv; private String s; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //隐藏原有标题 getSupportActionBar().hide(); mInflater = LayoutInflater.from(this); for (int i = 0; i < mVals.length; i++){ tv = (TextView) mInflater.inflate(R.layout.search_label_tv, mFlowlayout, false); tv.setText(mVals[i]); final String str = tv.getText().toString(); //点击事件 tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "你点击了" + str, Toast.LENGTH_SHORT).show(); } }); mFlowlayout.addView(tv); } //点击搜索加入 sou.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { s = editText.getText().toString(); tv = (TextView)mInflater.inflate(R.layout.search_label_tv, mFlowlayout, false); tv.setText(s); final String str = tv.getText().toString(); //点击事件 tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "你点击了" + str, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(MainActivity.this, ListActivity.class); intent.putExtra("menu", str); startActivity(intent); } }); mFlowlayout.addView(tv); insert(s.toString()); Intent intent = new Intent(MainActivity.this, ListActivity.class); intent.putExtra("menu",s); startActivity(intent); } }); //清空 clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mFlowlayout.removeAllViews(); } }); } public void insert(String v){ String date = v; //第一个是id值,因为是自增长所以不用传入 dayStep dayStep = new dayStep(null, date); } @OnClick({R.id.edit, R.id.tv_sou, R.id.id_flowlayout,R.id.clear}) public void onClick(View v){ switch (v.getId()){ case R.id.edit: break; case R.id.tv_sou: break; case R.id.id_flowlayout: break; case R.id.clear: break; default: break; } } }
自定义FlowLayout
import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; public class FlowLayout extends ViewGroup { public FlowLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public FlowLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public FlowLayout(Context context) { this(context, null); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int sizeWidth = MeasureSpec.getSize(widthMeasureSpec); int modeWidth = MeasureSpec.getMode(widthMeasureSpec); int sizeHeight = MeasureSpec.getSize(heightMeasureSpec); int modeHeight = MeasureSpec.getMode(heightMeasureSpec); int width = 0; int height = 0; int lineWidth = 0; int lineHeight = 0; int cCount = getChildCount(); for (int i = 0; i < cCount; i++) { View child = getChildAt(i); measureChild(child, widthMeasureSpec, heightMeasureSpec); MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams(); int childWidth = child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin; int childHeight = child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin; if (lineWidth + childWidth > sizeWidth - getPaddingLeft() - getPaddingRight()) { width = Math.max(width, lineWidth); lineWidth = childWidth; height += lineHeight; lineHeight = childHeight; } else { lineWidth += childWidth; lineHeight = Math.max(lineHeight, childHeight); } if (i == cCount - 1) { width = Math.max(lineWidth, width); height += lineHeight; } } setMeasuredDimension( modeWidth == MeasureSpec.EXACTLY ? sizeWidth : width + getPaddingLeft() + getPaddingRight(), modeHeight == MeasureSpec.EXACTLY ? sizeHeight : height + getPaddingTop() + getPaddingBottom() ); } private List<List<View>> mAllViews = new ArrayList<List<View>>(); private List<Integer> mLineHeight = new ArrayList<Integer>(); @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { mAllViews.clear(); mLineHeight.clear(); int width = getWidth(); int lineWidth = 0; int lineHeight = 0; List<View> lineViews = new ArrayList<View>(); int cCount = getChildCount(); for (int i = 0; i < cCount; i++) { View child = getChildAt(i); MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams(); int childWidth = child.getMeasuredWidth(); int childHeight = child.getMeasuredHeight(); if (childWidth + lineWidth + lp.leftMargin + lp.rightMargin > width - getPaddingLeft() - getPaddingRight()) { mLineHeight.add(lineHeight); mAllViews.add(lineViews); lineWidth = 0; lineHeight = childHeight + lp.topMargin + lp.bottomMargin; lineViews = new ArrayList<View>(); } lineWidth += childWidth + lp.leftMargin + lp.rightMargin; lineHeight = Math.max(lineHeight, childHeight + lp.topMargin + lp.bottomMargin); lineViews.add(child); } mLineHeight.add(lineHeight); mAllViews.add(lineViews); int left = getPaddingLeft(); int top = getPaddingTop(); int lineNum = mAllViews.size(); for (int i = 0; i < lineNum; i++) { lineViews = mAllViews.get(i); lineHeight = mLineHeight.get(i); for (int j = 0; j < lineViews.size(); j++) { View child = lineViews.get(j); if (child.getVisibility() == View.GONE) { continue; } MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams(); int lc = left + lp.leftMargin; int tc = top + lp.topMargin; int rc = lc + child.getMeasuredWidth(); int bc = tc + child.getMeasuredHeight(); child.layout(lc, tc, rc, bc); left += child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin; } left = getPaddingLeft(); top += lineHeight; } } @Override public LayoutParams generateLayoutParams(AttributeSet attrs) { return new MarginLayoutParams(getContext(), attrs); } }
ListActivity
import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import com.bwie.test.adapter.MyAdapter; import com.bwie.test.bean.CaipuBean; import com.bwie.test.inter.OnitemClickListener; import com.bwie.test.myyuekao.view.CaipuView; import com.bwie.test.presenter.CaipuPresenter; import com.bwie.test.utils.Api; import com.google.gson.Gson; import java.io.IOException; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import okhttp3.ResponseBody; public class ListActivity extends AppCompatActivity implements CaipuView { @BindView(R.id.main2_recycler) RecyclerView main2Recycler; private CaipuPresenter caipuPresenter; private List<CaipuBean.ResultBean.DataBean> data; private String string; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); ButterKnife.bind(this); //隐藏原有标题 getSupportActionBar().hide(); String menu = getIntent().getStringExtra("menu"); //从presenter层调用方法 caipuPresenter = new CaipuPresenter(); caipuPresenter.attac(this); caipuPresenter.getDate(Api.URL_CAIDAN,"85d18f495097cadb97f8b7d7004994fd", menu); } @Override public void onSuccess(ResponseBody responseBody) { try { string = responseBody.string(); CaipuBean caipuBean = new Gson().fromJson(string, CaipuBean.class); data = caipuBean.getResult().getData(); Log.d("ListActivity", "data:" + data.toString()); MyAdapter myAdapter = new MyAdapter(this,data); main2Recycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); main2Recycler.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); main2Recycler.setAdapter(myAdapter); final ArrayList<String> strings = new ArrayList<>(); final ArrayList<String> strings2 = new ArrayList<>(); myAdapter.setOnitemClickListener(new OnitemClickListener() { @Override public void onClick(int position) { List<CaipuBean.ResultBean.DataBean.StepsBean> steps = data.get(position).getSteps(); int size = steps.size(); for (int i = 0; i < size; i++){ String img = steps.get(i).getImg(); strings.add(img); String step = steps.get(i).getStep(); strings2.add(step); } Intent intent = new Intent(ListActivity.this, DetailsActivity.class); intent.putStringArrayListExtra("string", strings); intent.putStringArrayListExtra("string2", strings2); startActivity(intent); } @Override public void onLongClick(int position) { } }); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); if (caipuPresenter != null){ caipuPresenter = null; } } }
DetailsActivity
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import com.bwie.test.inter.MImage; import com.youth.banner.Banner; import com.youth.banner.listener.OnBannerListener; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; public class DetailsActivity extends AppCompatActivity { @BindView(R.id.main3_banner) Banner banner; @BindView(R.id.main3_textview) TextView main3Textview; private ArrayList<String> string; private ArrayList<String> string2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details); ButterKnife.bind(this); //隐藏原有标题 getSupportActionBar().hide(); string = getIntent().getStringArrayListExtra("string"); Log.d("DetailsActivity", string.toString()); string2 = getIntent().getStringArrayListExtra("string2"); Log.d("DetailsActivity",string2.toString()); banner.setImageLoader(new MImage()); banner.setImages(string);//图片集合 banner.isAutoPlay(true);//是否自动轮播 banner.setDelayTime(3000);//时间 banner.start();//开始 int size = string2.size(); String sss = ""; for (int i = 0; i<size; i++){ String s = string2.get(i); sss = sss + "\t" + "\n" + s; } main3Textview.setText(sss); banner.setOnBannerListener(new OnBannerListener() { private String s; @Override public void OnBannerClick(int position) { s = "" + string2.get(position); Toast.makeText(DetailsActivity.this, s, Toast.LENGTH_SHORT).show(); } }); } }
app文件夹下MyApp
import android.app.Application; import android.database.sqlite.SQLiteDatabase; import com.bwie.test.greendao.DaoMaster; import com.bwie.test.greendao.DaoSession; import com.facebook.drawee.backends.pipeline.Fresco; public class MyApp extends Application{ private DaoMaster.DevOpenHelper mHelper; private SQLiteDatabase db; private DaoMaster mDaoMaster; private DaoSession mDaoSession; public static MyApp instances; @Override public void onCreate() { super.onCreate(); //初始化fresco Fresco.initialize(this); instances = this; setDatabase(); } public static MyApp getInstances() { return instances; } private void setDatabase() { mHelper = new DaoMaster.DevOpenHelper(this, "sport-db", null); db = mHelper.getWritableDatabase(); mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); } public DaoSession getDaoSession() { return mDaoSession; } public SQLiteDatabase getDb() { return db; } }
greendao文件夹下DaoMaster
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.util.Log; import org.greenrobot.greendao.AbstractDaoMaster; import org.greenrobot.greendao.database.StandardDatabase; import org.greenrobot.greendao.database.Database; import org.greenrobot.greendao.database.DatabaseOpenHelper; import org.greenrobot.greendao.identityscope.IdentityScopeType; public class DaoMaster extends AbstractDaoMaster { public static final int SCHEMA_VERSION = 1; public static void createAllTables(Database db, boolean ifNotExists) { dayStepDao.createTable(db, ifNotExists); } public static void dropAllTables(Database db, boolean ifExists) { dayStepDao.dropTable(db, ifExists); } 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(dayStepDao.class); } public DaoSession newSession() { return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); } public DaoSession newSession(IdentityScopeType type) { return new DaoSession(db, type, daoConfigMap); } 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); } } 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); } } }
DaoSession
import com.bwie.test.utils.dayStep; import java.util.Map; import org.greenrobot.greendao.AbstractDao; import org.greenrobot.greendao.AbstractDaoSession; import org.greenrobot.greendao.database.Database; import org.greenrobot.greendao.identityscope.IdentityScopeType; import org.greenrobot.greendao.internal.DaoConfig; public class DaoSession extends AbstractDaoSession { private final DaoConfig dayStepDaoConfig; private final dayStepDao dayStepDao; public DaoSession(Database db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig> daoConfigMap) { super(db); dayStepDaoConfig = daoConfigMap.get(dayStepDao.class).clone(); dayStepDaoConfig.initIdentityScope(type); dayStepDao = new dayStepDao(dayStepDaoConfig, this); registerDao(dayStep.class, dayStepDao); } public void clear() { dayStepDaoConfig.clearIdentityScope(); } public dayStepDao getDayStepDao() { return dayStepDao; } }
dayStepDao
import android.database.Cursor; import android.database.sqlite.SQLiteStatement; import com.bwie.test.utils.dayStep; import org.greenrobot.greendao.AbstractDao; import org.greenrobot.greendao.Property; import org.greenrobot.greendao.internal.DaoConfig; import org.greenrobot.greendao.database.Database; import org.greenrobot.greendao.database.DatabaseStatement; public class dayStepDao extends AbstractDao<dayStep, Long> { public static final String TABLENAME = "DAY_STEP"; 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 dayStepDao(DaoConfig config) { super(config); } public dayStepDao(DaoConfig config, DaoSession daoSession) { super(config, daoSession); } public static void createTable(Database db, boolean ifNotExists) { String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"DAY_STEP\" (" + // "\"_id\" INTEGER PRIMARY KEY ," + // 0: id "\"NAME\" TEXT);"); // 1: name } public static void dropTable(Database db, boolean ifExists) { String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"DAY_STEP\""; db.execSQL(sql); } @Override protected final void bindValues(DatabaseStatement stmt, dayStep entity) { stmt.clearBindings(); Long id = entity.getId(); if (id != null) { stmt.bindLong(1, id); } String name = entity.getName(); if (name != null) { stmt.bindString(2, name); } } @Override protected final void bindValues(SQLiteStatement stmt, dayStep entity) { stmt.clearBindings(); Long id = entity.getId(); if (id != null) { stmt.bindLong(1, id); } String name = entity.getName(); if (name != null) { stmt.bindString(2, name); } } @Override public Long readKey(Cursor cursor, int offset) { return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); } @Override public dayStep readEntity(Cursor cursor, int offset) { dayStep entity = new dayStep( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1) ); return entity; } @Override public void readEntity(Cursor cursor, dayStep entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); entity.setName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); } @Override protected final Long updateKeyAfterInsert(dayStep entity, long rowId) { entity.setId(rowId); return rowId; } @Override public Long getKey(dayStep entity) { if(entity != null) { return entity.getId(); } else { return null; } } @Override public boolean hasKey(dayStep entity) { return entity.getId() != null; } @Override protected final boolean isEntityUpdateable() { return true; } }
adapter文件夹下MyAdapter
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bwie.test.bean.CaipuBean; import com.bwie.test.inter.OnitemClickListener; import com.bwie.test.myyuekao.R; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private Context context; List<CaipuBean.ResultBean.DataBean> data; public MyAdapter(Context conext, List<CaipuBean.ResultBean.DataBean> data ) { this.context = conext; this.data=data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.recyclerview_item, parent, false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } OnitemClickListener onitemClickListener; public void setOnitemClickListener(OnitemClickListener onitemClickListener) { this.onitemClickListener = onitemClickListener; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { Log.d("MyAdapter--s", data.get(position).getAlbums().toString()); String s = data.get(position).getAlbums().toString(); int length = s.length(); String substring = s.substring(1, length - 1); Log.d("MyAdapter-substring", substring); holder.item_simple.setImageURI(substring); holder.item_text01.setText(data.get(position).getTitle()); holder.item_text02.setText(data.get(position).getBurden()); if (onitemClickListener!=null){ holder.item_simple.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onitemClickListener.onClick(position); } }); holder.item_simple.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { onitemClickListener.onLongClick(position); return false; } }); } } @Override public int getItemCount() { //显示的条目数 return data.size(); } class ViewHolder extends RecyclerView.ViewHolder { private TextView item_text01; private TextView item_text02; private SimpleDraweeView item_simple; public ViewHolder(View itemView) { super(itemView); item_text01 = itemView.findViewById(R.id.item_text01); item_text02 = itemView.findViewById(R.id.item_text02); item_simple = itemView.findViewById(R.id.item_simple); } } }
view文件夹下CaipuView
import okhttp3.ResponseBody; public interface CaipuView { void onSuccess(ResponseBody responseBody); }
model文件夹下CaipuModel
import com.bwie.test.presenter.ICaipuPresenter; import com.bwie.test.utils.Api; import com.bwie.test.utils.RetrofitHelper; import java.util.HashMap; import java.util.Map; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; public class CaipuModel { ICaipuPresenter caipuP; public CaipuModel(ICaipuPresenter caipuP) { this.caipuP = caipuP; } public void doget(String url,String key,String menu){ Map<String ,String > map=new HashMap<>(); map.put("key",key); map.put("menu",menu); RetrofitHelper.getApiService(Api.URL).doGet(url,map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<ResponseBody>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseBody responseBody) { caipuP.onSuccess(responseBody); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }
presenter文件夹下CaipuPresenter
import com.bwie.test.model.CaipuModel; import com.bwie.test.myyuekao.view.CaipuView; import okhttp3.ResponseBody; public class CaipuPresenter implements ICaipuPresenter { CaipuModel caipuModel; CaipuView caipuView; public CaipuPresenter() { caipuModel = new CaipuModel(this); } public void attac(CaipuView caipuView) { this.caipuView = caipuView; } public void dell() { if (caipuView != null) { caipuView = null; } } public void getDate(String url, String key, String numm) { caipuModel.doget(url, key, numm); } @Override public void onSuccess(ResponseBody responseBody) { caipuView.onSuccess(responseBody); } }
ICaipuPresenter
import okhttp3.ResponseBody; public interface ICaipuPresenter { void onSuccess(ResponseBody responseBody); }
inter文件夹下MImage
import android.content.Context; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.youth.banner.loader.ImageLoader; public class MImage extends ImageLoader { public void displayImage(Context context, Object path, ImageView imageView) { //Glide 加载图片简单用法 Glide.with(context).load(path).into(imageView); } }
OnitemClickListener
public interface OnitemClickListener { void onClick(int position); void onLongClick(int position); }
utils文件夹下Api
public class Api { //http://apis.juhe.cn/cook/query?key=85d18f495097cadb97f8b7d7004994fd&menu=西红柿&rn=10&pn=3 public static final String URL="http://apis.juhe.cn/"; public static final String URL_CAIDAN="cook/query"; }
ApiService
import java.util.Map; import io.reactivex.Observable; import okhttp3.ResponseBody; import retrofit2.http.GET; import retrofit2.http.QueryMap; import retrofit2.http.Url; public interface ApiService { @GET Observable<ResponseBody> doGet(@Url String url, @QueryMap Map<String, String> map); }
dayStep
import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Generated; @Entity public class dayStep { @Id Long id; String name; @Generated(hash = 1099736830) public dayStep(Long id, String name) { this.id = id; this.name = name; } @Generated(hash = 1348095957) public dayStep() { } 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; } }
RetrofitHelper
import android.os.Environment; import java.io.File; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitHelper { public static OkHttpClient okHttpClient; public static ApiService apiService; static { getOkHttpClient(); } private static OkHttpClient getOkHttpClient() { if (okHttpClient == null){ synchronized (OkHttpClient.class){ if (okHttpClient == null){ File file = new File(Environment.getExternalStorageDirectory(),"cahce"); long fileSize = 10*1024*1024; okHttpClient = new OkHttpClient.Builder() .readTimeout(15, TimeUnit.SECONDS) .writeTimeout(15,TimeUnit.SECONDS) .connectTimeout(15,TimeUnit.SECONDS) .cache(new Cache(file,fileSize)) .build(); } } } return okHttpClient; } public static ApiService getApiService(String url){ if (apiService == null){ synchronized (OkHttpClient.class){ apiService = createApiService(ApiService.class,url); } } return apiService; } private static <T>T createApiService(Class<T> tClass, String url) { T t = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(okHttpClient) .build() .create(tClass); return t; } }
bean文件夹下CaipuBean
import java.util.List; public class CaipuBean { private String resultcode; private String reason; private ResultBean result; private int error_code; public String getResultcode() { return resultcode; } public void setResultcode(String resultcode) { this.resultcode = resultcode; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public ResultBean getResult() { return result; } public void setResult(ResultBean result) { this.result = result; } public int getError_code() { return error_code; } public void setError_code(int error_code) { this.error_code = error_code; } public static class ResultBean { private String totalNum; private String pn; private String rn; private List<DataBean> data; public String getTotalNum() { return totalNum; } public void setTotalNum(String totalNum) { this.totalNum = totalNum; } public String getPn() { return pn; } public void setPn(String pn) { this.pn = pn; } public String getRn() { return rn; } public void setRn(String rn) { this.rn = rn; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private String id; private String title; private String tags; private String imtro; private String ingredients; private String burden; private List<String> albums; private List<StepsBean> steps; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getTags() { return tags; } public void setTags(String tags) { this.tags = tags; } public String getImtro() { return imtro; } public void setImtro(String imtro) { this.imtro = imtro; } public String getIngredients() { return ingredients; } public void setIngredients(String ingredients) { this.ingredients = ingredients; } public String getBurden() { return burden; } public void setBurden(String burden) { this.burden = burden; } public List<String> getAlbums() { return albums; } public void setAlbums(List<String> albums) { this.albums = albums; } public List<StepsBean> getSteps() { return steps; } public void setSteps(List<StepsBean> steps) { this.steps = steps; } public static class StepsBean { private String img; private String step; public String getImg() { return img; } public void setImg(String img) { this.img = img; } public String getStep() { return step; } public void setStep(String step) { this.step = step; } } } } }