dependencies {
compile 'com.github.Loror:LororBoot:v1.1.0release'
}
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
如有v4包等冲突建议引入时排除v4包,框架对recyclerView进行了支持,如排除了support包请手动为你的项目引入recyclerView, 否则请删除exclude group: 'com.android.support'
compile('com.github.Loror:LororBoot:v1.1.0release') {
exclude group: 'com.android.support'
exclude module: 'appcompat-v7'
exclude module: 'support-v4'
}
可参考demo使用,使用时需继承LororActivity,LororFragment,LororDialog,BindAbleItem使用,以上均实现于BindAble接口,也可自己实现BindAble接口复写绑定、事件处理。
注解@Bind
Bind示例代码
@Bind(id = R.id.checkBox)
boolean checked = true;
@Bind(id = R.id.textView)
String text = "绑定TextView显示";
@Bind(id = R.id.editText)
String doubleBindText = "绑定EditText内容";
@Bind(id = R.id.imageView, imagePlace = R.mipmap.ic_launcher, bitmapConverter = RoundBitmapConverter.class)
String image;
@Bind(id = R.id.progressBar)
int progress;
@Bind(id = R.id.listView)
List listItems = new ArrayList<>();
@Bind(id = R.id.banner, imagePlace = R.mipmap.ic_launcher)
List listBanners = new ArrayList<>();
CheckBox(双向绑定)仅支持绑定boolean(Boolean)类型;TextView绑定的参数显示时将使用String.valueOf(object)获取内容显示;EditText的双向绑定仅在绑定String/CharSequence时生效; ImageView支持绑定String类型(自动适配sd卡/网络图片地址进行加载),int类型(此时只能使用drawable,否则会出错);AbsListView(ListView/GridView等)/RecyclerView仅支持绑定List(或ArrayList) extends BindAbleItem>, 否则抛出异常;BindAbleBannerView(内部banner控件)支持绑定List(或ArrayList) extends BindAbleItem>/List类型,使用BindAbleItem可指定banner控件样式,否则将仅显示图片; ProgressBar仅支持绑定int(Integer),long(Long)类型。 注:CheckBox,EditText自动双向绑定,控件内容改变时参数将自动修改。
public class ListItem extends BindAbleItem {
@Bind(id = R.id.text)
public String text;
@Override
public int viewType() {
return obtainPosition() % 2;
}
@Override
public int viewTypeCount() {
return 2;
}
@Override
public int getLayout(int viewType) {
return viewType == 0 ? R.layout.item_list_view : R.layout.item_list_view_2;
}
}
继承BindAbleItem后可实现上述方法,指定layout等。内置方法obtainPosition()可获取当前item所处位置。obtainOutBindAble()可获取通过@Bind绑定该BindAbleItem的对象。
注:默认bind为自动刷新模式,可定义BaseActivity继承于LororActivity,在onCreate中使用方法setBindAbleAutoRefresh(false)关闭自动刷新, 若关闭自动刷新,请在修改bind的参数后手动调用changeState(null)刷新控件显示
注解@GET @POST @PUT @DELETE
注解@BaseUrl
注解@DefaultHeaders @DefaultParams
注解@Header @Param @ParamObject @ParamJson
注解@AsJson
注解@UrlEncode
示例代码
@BaseUrl("http://127.0.0.1")
public interface ServerApi {
@GET("/test")
@DefaultParams(keys = "key", values = "123")//用于指定固定参数,key,value位置需一一对应
Observable getResult(@Header("token") String token, @Param("id") String id);
//支持返回类型原生responce(Responce),字符串(String),对象(将使用Json解释器生成对象)
//请求类型@GET,@POST,@DELETE,@PUT
//参数@Header,@Param,@ParamObject,@ParamJson
}
new ApiClient()
.setBaseUrl("https://www.baidu.com") //可在此设置,也可使用注解,注解优先度较高,会覆盖此处设置
.setOnRequestListener(new OnRequestListener() {//监听请求的生命周期,可做公共处理
@Override
public void onRequestBegin(HttpClient client, ApiRequest request) {
Log.e("RESULT_", request.getUrl() + " " + request.getParams());
}
@Override
public void onRequestEnd(HttpClient client, ApiResult result) {
}
})
.create(ServerApi.class)
.getResult("xxxx", "1")
.subscribe(new Observer() {
@Override
public void success(Responce data) {
Log.e("RESULT_", data.toString() + " ");
}
@Override
public void failed(int code, Throwable e) {
Log.e("RESULT_", code + " = " + e);
}
});
注:网络请求包含多个默认配置
GET/DELETE请求,默认参数将进行url编码
POST/PUT,默认参数不进行url编码,参数中带有文件时将使用multipart/form-data进行传参;@AsJson将param组合为json进行提交, @ParamJson指定了json参数时,其他参数将拼接到url中进行提交,@ParamJson会覆盖@AsJson使其失效,json传参仅对post生效,post参数中携带文件时无法使用json传参,json相关注解将失效
框架内部未引入json解析器,请用你使用的json解析器配置json解析,推荐在application中指定
//如要使用注解形式网络访问,必须实现Json解释器
ApiClient.setJsonParser(new JsonParser() {
@Override
public Object jsonToObject(String json, Class> classType) {
return JSON.parseObject(json, classType);
}
@Override
public String objectToJson(Object object) {
return JSON.toJSONString(object);
}
});
示例代码
接口DataBusReceiver(同进程消息),RemoteDataBusReceiver(跨进程消息)
public class MainActivity extends LororActivity implements RemoteDataBusReceiver {
@Override
@DataRun(thread = RunThread.MAINTHREAD)//指定执行线程
public void receiveData(String name, Intent data) {
if ("toast".equals(name)) {
Toast.makeText(this, data.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
text = "收到消息了";
}
Log.e("DATA_BUS", (Looper.getMainLooper() == Looper.myLooper() ? "-主线程" : "-子线程"));
}
}
其它方法详见LororUtil库
github地址:https://github.com/Loror/LororBoot