常用到的技术框架:
1 数据库:GreenDao
2 事件总线:EventBus
3 链式调用:Rxjava2
4 网络封装:Retrofit2(Okhttps)
5 视图:RecyclerView
6 注解:ButterKnife
7 图片:iconfont
1 GreenDao的使用
1 配置依赖
Project 的Gradle中
buildscript{
dependencies{
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
Module 的Gradle中
apply plugin: 'org.greenrobot.greendao'
android{
greendao {
schemaVersion 1
}
}
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
2 定义bean 表
@Entity(
nameInDb = "book_info",//表名
generateConstructors = false
)
public class Book{
@Id(autoincrement = true)
private Long _id;//主键
@Property(nameInDb = "video_id")
public String video_id;
}
------rebuild Project
3 初始化
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "shop.db");
//获取可写数据库
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取Dao对象管理者
daoSession = daoMaster.newSession();
4 使用
BookDao dao = daoSession.getBookDao();
dao.insert(book);
5 建议对DaoSession 进行封装
——————————————————————
2 EventBus 事件总线的引用
1 配置依赖
在Module中配置Gradle
dependencies{
compile 'org.simple:androideventbus:1.0.5'
}
2 注册与注销
在Activity /Fragment (onCreate/onDestroy)中
EventBus.getDefault().register(this);
EventBus.getDefault().unregister(this);
3 发送
发送对象(Object),指定Tag(String)
EventBus.getDefault().post(bundle, Event.MSG_DIALOG);
4 接收
订阅对象,最好有instanceof + 判空的逻辑
@Subscriber(tag = Event.MSG_DIALOG)
private void getMessageSuccess(Bundle bundle){}
——————————————————————
3 Rxjava2 链式调用
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
}
}).subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(Object value) {}
@Override
public void onError(Throwable e) {}
@Override
public void onComplete() {}
});
订阅和回调
subscribeOn(Schedulers.io()) //之前的操作,发生在 IO线程中
.observeOn(AndroidSchedulers.mainThread()) //最终的回调判断,发送在主线中
——————————————————————
4 Retrofit2 网络层封装
public static T tokenCreate(final Class service) {
return new Retrofit.Builder()
.client(OkHttpUtils.getInstance().getOkHttpClient())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(NetConstant.IPAFRESS).build().create(service);
}
传入Service
public interface CloudService {
@POST("/api/services/app/Troubles/getAllKeyAreas")
Observable> queryAllArea(@Body AreaInput input);
}
Observable> ob = RetrofitHelper.tokenCreate(Service.class).query(input);
分别封装(Client IP地址,Gson解析,Bean对象,Service封装)
形成一次网络请求
——————————————————————
5 RececlyeView 视图
1 配置依赖
模块内配置
dependencies {
implementation 'com.android.support:recyclerview-v7:26.1.0'
}
2 布局文件
3 参数设置
//recyclerView.setLayoutManager(new GridLayoutManager(this, 4)); //网格
recyclerView.setLayoutManager(new LinearLayoutManager(this)); //列表
//每个item大小如果是确定的,设置可以提高性能
recyclerView.setHasFixedSize(true); //每个元素固定大小
recyclerView.setAdapter(mAdapter);
4 适配器设置
继承RecyclerView.Adapter
abstract class BaseRecyAdapter extends RecyclerView.Adapter {
实现方法,设置对应的显示
@Override
public void myBindViewHolder(final ViewHolder holder, final int position) {} //具体变化
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {} //布局文件
5 View布局文件的Bean对象
class ViewHolder extends RecyclerView.ViewHolder {}
——————————————————————
6 ButterKnife注解框架
1 配置依赖
dependencies {
compile 'com.jakewharton:butterknife:8.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.1.0'
}
2 Activity 只需要绑定
ButterKnife.bind(this);
3 Fragment 绑定+注销
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
unbinder = ButterKnife.bind(this, containerView);
}
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
4 安装插件
打开File--Setting--Plugins--Android ButterKnife Zelezny
安装插件,然后重启
5 右键自动生成
——————————————————————
7 Iconfont 的使用
1 来源
http://www.iconfont.cn/ (阿里出品)
2 下载
html eot svg ttf woff (5个必要的文件)
main/assets/iconfont/ 下面
3 配置
html 中的()类型的字符,配置到string.xml中
4 使用TextView @string来引用
需要设置颜色和大小 TextColor TextSize
5 设置引用
Typeface iconfont = Typeface.createFromAsset(getAssets(), "iconfont/iconfont.ttf");
textview.setTypeface(iconfont);
最好是,重写TextView
public class ImageTextView extends AppCompatTextView {
public Context mContext;
public ImageTextView(Context context) {
super(context);
init(context);
}
public ImageTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context){
Typeface iconfont = Typeface.createFromAsset(context.getAssets(), "iconfont/iconfont.ttf");
mContext = context;
setTypeface(iconfont);
}
}