GreenDao 集成步骤
外部 build.gradle
第一步:
mavenCentral() // add repositor
第二步:
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin内部 build.gradle
第三步
apply plugin: 'org.greenrobot.greendao' // apply plugin第四步: 指定自动生成的daoo包
第五步: 导依赖** * greendao * */ greendao{ targetGenDir 'src/main/java' daoPackage 'com.example.snmsung.zhoukaolianxi2.dao' schemaVersion 1 } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) impleme
compile 'org.greenrobot:greendao:3.2.2' // add library
导依赖
compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2' compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' compile 'com.facebook.fresco:fresco:0.11.0' compile 'it.sephiroth.android.library.picasso:picasso:2.5.2.4b' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' compile 'org.greenrobot:greendao:3.2.2' // add library
工具类
ApiService
package com.example.snmsung.zhoukaolianxi2.Utlis; import com.example.snmsung.zhoukaolianxi2.Bean.User; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.http.GET; import rx.Observable; public interface ApiService { @GET("/api/data/福利/10/1") Observable<User> getData(); Retrofit RETROFIT = new Retrofit.Builder() .baseUrl("http://gank.io") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService API_SERVICE = RETROFIT.create(ApiService.class); }
Applicationpackage com.example.snmsung.zhoukaolianxi2; import android.app.Application; import com.example.snmsung.zhoukaolianxi2.dao.DaoMaster; import com.example.snmsung.zhoukaolianxi2.dao.DaoSession; import com.facebook.drawee.backends.pipeline.Fresco; import org.greenrobot.greendao.database.Database; public class App extends Application{ public static DaoSession session; @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"test"); Database database = helper.getWritableDb(); session = new DaoMaster(database).newSession(); } }
IbanView
package com.example.snmsung.zhoukaolianxi2.View; import com.example.snmsung.zhoukaolianxi2.Bean.User; /** * Created by SNMSUNG on 2017/12/2. */ public interface IbanView { void showHome(User user); }Moder层 接口
lHome
package com.example.snmsung.zhoukaolianxi2.Moder; import com.example.snmsung.zhoukaolianxi2.Bean.User; /** * Created by SNMSUNG on 2017/12/2. */ public interface lHome { void showData1(MoVie moVie); interface MoVie { void complete(User user); } }Moder 层
package com.example.snmsung.zhoukaolianxi2.Moder; import com.example.snmsung.zhoukaolianxi2.Bean.User; import com.example.snmsung.zhoukaolianxi2.Utlis.ApiService; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by SNMSUNG on 2017/12/2. */ public class Home_Moder implements lHome { @Override public void showData1(final MoVie moVie) { ApiService.API_SERVICE.getData() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<User>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(User user) { moVie.complete(user); } }); } }
基类
BaseFragment
package com.example.snmsung.zhoukaolianxi2.Presemter; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; /** * Created by SNMSUNG on 2017/12/2. */ public abstract class BaseFragment<T extends IPresenter> extends Fragment { T presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); createpresenter(); } protected abstract void createpresenter(); @Override public void onDestroy() { super.onDestroy(); if (presenter != null) { presenter.datach(); } } }
泛型
IPresenter
package com.example.snmsung.zhoukaolianxi2.Presemter; /** * Created by SNMSUNG on 2017/12/2. */ public interface IPresenter<T> { void attch(T view); void datach(); }
P层
Presenter_View
package com.example.snmsung.zhoukaolianxi2.Presemter; import com.example.snmsung.zhoukaolianxi2.Bean.User; import com.example.snmsung.zhoukaolianxi2.Moder.Home_Moder; import com.example.snmsung.zhoukaolianxi2.Moder.lHome; import com.example.snmsung.zhoukaolianxi2.View.IbanView; import java.lang.ref.SoftReference; /** * Created by SNMSUNG on 2017/12/2. */ public class Presenter_View implements IPresenter<IbanView> { lHome home; SoftReference<IbanView> softReference; public Presenter_View(IbanView view) { attch(view); home = new Home_Moder(); } public void ShowHome() { home.showData1(new lHome.MoVie() { @Override public void complete(User user) { softReference.get().showHome(user); } }); } @Override public void attch(IbanView view) { softReference = new SoftReference(view); } @Override public void datach() { softReference.clear(); } }
适配器
MyAdapter
package com.example.snmsung.zhoukaolianxi2.Adapter; import android.content.Context; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.example.snmsung.zhoukaolianxi2.Bean.ResultsBean; import com.example.snmsung.zhoukaolianxi2.Bean.User; import com.example.snmsung.zhoukaolianxi2.R; import java.util.ArrayList; import java.util.List; /** * Created by SNMSUNG on 2017/12/2. */ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> { private Context context; List<ResultsBean> list; public MyAdapter(Context context) { this.context=context; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item, null); MyHolder myHolder = new MyHolder(view); return myHolder; } public void addData(User user){ if (list==null){ list=new ArrayList<>(); } list.addAll(user.getResults()); notifyDataSetChanged(); } @Override public void onBindViewHolder(MyHolder holder, int position) { holder.textView.setText(list.get(position).getWho()); holder.imageView.setImageURI(Uri.parse(list.get(position).getUrl())); //点击 EventBus 粘性相传holder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().postSticky(new EventBean(list.get(position).getUrl(),list.get(position).getWho())); context.startActivity(new Intent(context, Main2Activity.class)); } });} @Override public int getItemCount() { return list == null ? 0 : list.size(); } public class MyHolder extends RecyclerView.ViewHolder { private final ImageView imageView; private final TextView textView; public MyHolder(View itemView) { super(itemView); imageView = (ImageView) itemView.findViewById(R.id.img); textView = (TextView) itemView.findViewById(R.id.tv); } }}
EventB 注册
package com.example.snmsung.zhouikaolianxi2; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; import com.example.snmsung.zhouikaolianxi2.Bean.EventBean; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); EventBus.getDefault().register(this); } @Subscribe(sticky = true) public void event(EventBean eventBean){ Toast.makeText(this,""+eventBean.getTitle()+""+eventBean.getUrl(),Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } }
User 大Bean
package com.example.snmsung.zhoukaolianxi2.Bean; import java.util.List; /** * Created by SNMSUNG on 2017/12/2. */ public class User { /** * error : false * results : [{"_id":"5a1ad043421aa90fe725366c","createdAt":"2017-11-26T22:31:31.363Z","desc":"11-26","publishedAt":"2017-11-30T13:11:10.665Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171126223118_jeCYtY_chayexiaoguo_apple_26_11_2017_22_30_59_409.jpeg","used":true,"who":"代码家"},{"_id":"5a16171d421aa90fef203553","createdAt":"2017-11-23T08:32:29.546Z","desc":"11-23","publishedAt":"2017-11-24T11:08:03.624Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171123083218_5mhRLg_sakura.gun_23_11_2017_8_32_9_312.jpeg","used":true,"who":"daimajia"},{"_id":"5a121895421aa90fe50c021e","createdAt":"2017-11-20T07:49:41.797Z","desc":"2017-11-20","publishedAt":"2017-11-20T12:42:06.454Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171120074925_ZXDh6l_joanne_722_20_11_2017_7_49_16_336.jpeg","used":true,"who":"daimajia"},{"_id":"5a0e4a0d421aa90fe7253643","createdAt":"2017-11-17T10:31:41.155Z","desc":"11-17","publishedAt":"2017-11-17T12:39:48.189Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/2017-11-17-22794158_128707347832045_9158114204975104000_n.jpg","used":true,"who":"代码家"},{"_id":"5a0d0c97421aa90fe2f02c60","createdAt":"2017-11-16T11:57:11.4Z","desc":"11-16","publishedAt":"2017-11-16T12:01:05.619Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171116115656_vnsrab_Screenshot.jpeg","used":true,"who":"代码家"},{"_id":"5a0a5141421aa90fef203525","createdAt":"2017-11-14T10:13:21.137Z","desc":"11-14","publishedAt":"2017-11-14T10:43:36.180Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171114101305_NIAzCK_rakukoo_14_11_2017_10_12_58_703.jpeg","used":true,"who":"daimajia"},{"_id":"5a08ea7b421aa90fe7253628","createdAt":"2017-11-13T08:42:35.306Z","desc":"11-13","publishedAt":"2017-11-13T12:10:58.643Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171113084220_LuJgqv_sakura.gun_13_11_2017_8_42_12_311.jpeg","used":true,"who":"daimajia"},{"_id":"5a03b502421aa90fe7253618","createdAt":"2017-11-09T09:53:06.802Z","desc":"11-9","publishedAt":"2017-11-10T08:10:02.838Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171109095254_dOw5qh_bluenamchu_9_11_2017_9_52_47_256.jpeg","used":true,"who":"daimajia"},{"_id":"5a011452421aa90fe7253606","createdAt":"2017-11-07T10:02:58.73Z","desc":"11-7","publishedAt":"2017-11-08T11:00:50.559Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171107100244_0fbENB_yyannwong_7_11_2017_10_2_5_982.jpeg","used":true,"who":"daimajia"},{"_id":"59fa7379421aa90fe50c01cc","createdAt":"2017-11-02T09:23:05.497Z","desc":"11-2","publishedAt":"2017-11-06T12:40:39.976Z","source":"chrome","type":"福利","url":"http://7xi8d6.com1.z0.glb.clouddn.com/20171102092251_AY0l4b_alrisaa_2_11_2017_9_22_44_335.jpeg","used":true,"who":"daimajia"}] */ private boolean error; private List<ResultsBean> results; public boolean isError() { return error; } public void setError(boolean error) { this.error = error; } public List<ResultsBean> getResults() { return results; } public void setResults(List<ResultsBean> results) { this.results = results; } }
ResultsBean 小BeanFragmentpackage com.example.snmsung.zhoukaolianxi2.Bean; import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Generated; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Property; import org.jetbrains.annotations.PropertyKey; import java.util.jar.Attributes; @Entity public class ResultsBean { /** * _id : 5a1ad043421aa90fe725366c * createdAt : 2017-11-26T22:31:31.363Z * desc : 11-26 * publishedAt : 2017-11-30T13:11:10.665Z * source : chrome * type : 福利 * url : http://7xi8d6.com1.z0.glb.clouddn.com/20171126223118_jeCYtY_chayexiaoguo_apple_26_11_2017_22_30_59_409.jpeg * used : true * who : 代码家 */ @Property(nameInDb = "tt") @Id(autoincrement = true) private Long Iid; private String _id; private String createdAt; private String desc; private String publishedAt; private String source; private String type; private String url; private boolean used; private String who; @Generated(hash = 2112844842) public ResultsBean(Long Iid, String _id, String createdAt, String desc, String publishedAt, String source, String type, String url, boolean used, String who) { this.Iid = Iid; this._id = _id; this.createdAt = createdAt; this.desc = desc; this.publishedAt = publishedAt; this.source = source; this.type = type; this.url = url; this.used = used; this.who = who; } @Generated(hash = 1822271928) public ResultsBean() { } public Long getIid() { return this.Iid; } public void setIid(Long Iid) { this.Iid = Iid; } public String get_id() { return this._id; } public void set_id(String _id) { this._id = _id; } public String getCreatedAt() { return this.createdAt; } public void setCreatedAt(String createdAt) { this.createdAt = createdAt; } public String getDesc() { return this.desc; } public void setDesc(String desc) { this.desc = desc; } public String getPublishedAt() { return this.publishedAt; } public void setPublishedAt(String publishedAt) { this.publishedAt = publishedAt; } public String getSource() { return this.source; } public void setSource(String source) { this.source = source; } public String getType() { return this.type; } public void setType(String type) { this.type = type; } public String getUrl() { return this.url; } public void setUrl(String url) { this.url = url; } public boolean getUsed() { return this.used; } public void setUsed(boolean used) { this.used = used; } public String getWho() { return this.who; } public void setWho(String who) { this.who = who; } @Override public String toString() { return "ResultsBean{" + "Iid=" + Iid + ", _id='" + _id + '\'' + ", createdAt='" + createdAt + '\'' + ", desc='" + desc + '\'' + ", publishedAt='" + publishedAt + '\'' + ", source='" + source + '\'' + ", type='" + type + '\'' + ", url='" + url + '\'' + ", used=" + used + ", who='" + who + '\'' + '}'; } }
package com.example.snmsung.zhoukaolianxi2.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.snmsung.zhoukaolianxi2.Adapter.MyAdapter; import com.example.snmsung.zhoukaolianxi2.App; import com.example.snmsung.zhoukaolianxi2.Bean.ResultsBean; import com.example.snmsung.zhoukaolianxi2.R; import com.example.snmsung.zhoukaolianxi2.Bean.User; import com.example.snmsung.zhoukaolianxi2.Presemter.BaseFragment; import com.example.snmsung.zhoukaolianxi2.Presemter.Presenter_View; import com.example.snmsung.zhoukaolianxi2.Utlis.ApiService; import com.example.snmsung.zhoukaolianxi2.View.IbanView; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; /** * Created by SNMSUNG on 2017/12/2. */ public class Fragment1 extends BaseFragment<Presenter_View> implements IbanView { @BindView(R.id.rec) RecyclerView rec; Unbinder unbinder; Presenter_View presenter; private MyAdapter myAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(), R.layout.fragment1, null); unbinder = ButterKnife.bind(this, view); presenter.ShowHome(); rec.setLayoutManager(new LinearLayoutManager(getActivity())); myAdapter = new MyAdapter(getActivity()); rec.setAdapter(myAdapter); List<ResultsBean> listBeans = App.session.getResultsBeanDao().loadAll(); for(ResultsBean bean : listBeans){ System.out.println(bean.toString()); } return view; } @Override protected void createpresenter() { presenter = new Presenter_View(this); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } @Override public void showHome(User user) { myAdapter.addData(user); } }MainActivity 类
package com.example.snmsung.zhoukaolianxi2; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.widget.RadioButton; import android.widget.RadioGroup; import com.example.snmsung.zhoukaolianxi2.fragment.Fragment1; import com.example.snmsung.zhoukaolianxi2.fragment.Fragment2; import com.example.snmsung.zhoukaolianxi2.fragment.Fragment3; import com.example.snmsung.zhoukaolianxi2.fragment.Fragment4; import com.example.snmsung.zhoukaolianxi2.fragment.Fragment5; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class MainActivity extends FragmentActivity { List<Fragment> list_frag; @BindView(R.id.vp1) ViewPager vp; @BindView(R.id.btn1) RadioButton btn1; @BindView(R.id.btn2) RadioButton btn2; @BindView(R.id.btn3) RadioButton btn3; @BindView(R.id.btn4) RadioButton btn4; @BindView(R.id.btn5) RadioButton btn5; @BindView(R.id.rg) RadioGroup rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); addFragment(); } private void addFragment() { list_frag = new ArrayList<>(); list_frag.add(new Fragment1()); list_frag.add(new Fragment2()); list_frag.add(new Fragment3()); list_frag.add(new Fragment4()); list_frag.add(new Fragment5()); ViewPagerp viewPagerp = new ViewPagerp(getSupportFragmentManager()); vp.setAdapter(viewPagerp); } public class ViewPagerp extends FragmentPagerAdapter { public ViewPagerp(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return list_frag.get(position); } @Override public int getCount() { return list_frag == null ? 0 : list_frag.size(); } } }
Drawable 里的图片 5个
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@mipmap/ac1"></item> <item android:drawable="@mipmap/ac0"></item> </selector>
dibu布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:background="#fff" android:layout_width="match_parent" android:layout_height="60dp" android:orientation="horizontal"> <RadioGroup android:id="@+id/rg" android:layout_width="match_parent" android:layout_height="60dp" android:orientation="horizontal"> <RadioButton android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="60dp" android:layout_weight="1" android:background="@drawable/select1" android:button="@null" /> <RadioButton android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="60dp" android:layout_weight="1" android:background="@drawable/select2" android:button="@null" /> <RadioButton android:id="@+id/btn3" android:layout_width="wrap_content" android:layout_height="60dp" android:layout_weight="1" android:background="@drawable/select3" android:button="@null" /> <RadioButton android:id="@+id/btn4" android:layout_width="wrap_content" android:layout_height="60dp" android:layout_weight="1" android:background="@drawable/select4" android:button="@null" /> <RadioButton android:id="@+id/btn5" android:layout_width="wrap_content" android:layout_height="60dp" android:layout_weight="1" android:background="@drawable/select5" android:button="@null" /> </RadioGroup> </LinearLayout> </LinearLayout>
MainActivity 布局
<?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="com.example.snmsung.zhukaolianxi.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="880dp" /> <include android:id="@+id/include2" layout="@layout/ditu" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"></include> </LinearLayout>