使用greendao数据库和butterknife绑定控件实现搜索页跳转列表至详情

效果图


使用的依赖和权限

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;
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值