第一步:根目录
maven { url "https://jitpack.io" }//1、快速适配器
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'//1、Greendao
第二步:子目录
apply plugin: 'org.greenrobot.greendao'//2、Greendao插件
//3、Greendao存放目录
greendao {
schemaVersion 1 //数据库版本号
daoPackage 'com.bawei.yuekaomoni.database' //设置时生成代码的目录
targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
}
//解决导完依赖版本号报红问题
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28.0.0'
}
}
}
}
依赖:
//Gson解析
implementation 'com.google.code.gson:gson:2.7'
//Glide图片
implementation 'com.github.bumptech.glide:glide:4.9.0'
//Glide的transformation库 支持圆角
implementation 'jp.wasabeef:glide-transformations:4.1.0'
//TabLayout(版本号要和SDK版本一致)
implementation 'com.android.support:design:28.0.0'
//Banner(轮播图)
implementation 'com.youth.banner:banner:1.4.9'
//Volley
implementation 'com.mcxiaoke.volley:library:1.0.19'
//RecyclerView(版本号要和SDK版本一致)
implementation 'com.android.support:recyclerview-v7:28.0.0'
//XRecyclerView(版本号要和SDK版本一致)允许刷新加载
implementation 'com.jcodecraeer:xrecyclerview:1.2.6'
//流式布局
implementation 'com.google.android:flexbox:1.0.0'
//二维码CodeUtils.createImage
implementation 'cn.yipianfengye.android:zxing-library:2.2'
//Butterknife
implementation 'com.jakewharton:butterknife:8.8.1'
//Butterknife注释处理器
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//okhttp
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
//ok日志拦截器 需要使用日志拦截器的时候使用
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
//EventBus
implementation 'org.greenrobot:eventbus:3.1.1'
//Retrofit2.0
implementation 'com.squareup.retrofit2:retrofit:+'
//让Retrofit2.0支持Gson自动解析json
implementation 'com.squareup.retrofit2:converter-gson:+'
//Rxjava2
implementation 'io.reactivex.rxjava2:rxjava:+'
//Rxandroid
implementation 'io.reactivex.rxjava2:rxandroid:+'
//让retrofit支持Rxjava2
implementation 'com.squareup.retrofit2:adapter-rxjava2:+'
//快速适配器
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
//Takephoto相册选择器
implementation 'org.devio.takephoto:takephoto_library:4.1.0'
//GreenDao
implementation 'org.greenrobot:greendao:3.2.2'
<!-- 相机CodeUtils -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" /> <!-- 隐私 -->
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 读 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 写 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 网络 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 手电筒 -->
<uses-permission android:name="android.permission.FLASHLIGHT" /> <!-- 硬件测试 -->
<uses-feature android:name="android.hardware.camera" />
<application
android:name=".util.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".activity.MyCircleActivity"></activity>
<activity android:name=".activity.ReleaseCircleActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
不要忘了写:android:name=".util.App"
第三步:第五步
base类:
public abstract class BaseActivity extends TakePhotoFragmentActivity {
public BasePresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (initlayoutResID() != 0) {
setContentView(initlayoutResID());
presenter = initPresenter();
initData();
}
}
//布局
protected abstract int initlayoutResID();
//对象
protected abstract BasePresenter initPresenter();
//数据
protected abstract void initData();
//释放
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter != null) {
presenter.onDestroy();
}
}
}
public class BasePresenter {
public IBaseView iBaseView;
public BasePresenter(IBaseView iBaseView) {
this.iBaseView = iBaseView;
}
//释放
public void onDestroy() {
if (iBaseView!=null){
iBaseView=null;
}
}
}
public interface IBaseView {
void onSuccess(String success);
void onList(List list);
void onFailure(String failure);
}
第六步:工具类:
* function:网络请求(单例)
*/
public class RxJavaUtil {
private static RxJavaUtil rxJavaUtil = null;
private final IApi iApi;
private RxJavaUtil() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient ok = new OkHttpClient.Builder()
.writeTimeout(5, TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.callTimeout(5,TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.PATH_BASE)
.client(ok)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
iApi = retrofit.create(IApi.class);
}
//供外部调用
public IApi getCreate(){
return iApi;
}
public static RxJavaUtil getInstance() {
if (rxJavaUtil == null) {
synchronized (RxJavaUtil.class) {
if (rxJavaUtil == null) {
rxJavaUtil = new RxJavaUtil();
}
}
}
return rxJavaUtil;
}
//判断网络
public boolean getNet(Context context){
if (context!=null){
ConnectivityManager manager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info!=null){
return info.isConnected();
}
}
return false;
}
}
APP类:
public class App extends Application {
public static Context sContext;
@Override
public void onCreate() {
super.onCreate();
sContext=this;
}
}
Api接口:
public interface Api {
//base
String PATH_BASE="http://172.17.8.100/";
//发布圈子
String PATH_RELEASECIRCLE="small/circle/verify/v1/releaseCircle";
//我的圈子
String PATH_FINDMYCIRCLEBYID="small/circle/verify/v1/findMyCircleById";
//用户信息
String USER_USERID="userId";
String USER_SESSIONID="sessionId";
//用户账号数据
String USER_USERID_S="8173";
String USER_SESSIONID_S="15690300265728173";
//发布圈子(哪个商品)
String USER_COMMODITYID="commodityId";
//发布圈子(商品描述)
String USER_CONTENT="content";
//我的圈子(页数)
String USER_PAGE="page";
//我的圈子(一页几条数据)
String USER_COUNT="count";
}
IApi接口
public interface IApi {
//发布圈子
@Multipart
@POST(Api.PATH_RELEASECIRCLE)
Observable<BeanReleaseCircle> getReleaseCircle(@HeaderMap Map<String, String> hmap, @QueryMap Map<String, Object> qmap, @Part List<MultipartBody.Part> mlist);
//我的圈子
@GET(Api.PATH_FINDMYCIRCLEBYID)
Observable<BeanMyCircle>getMyCircle(@HeaderMap Map<String, String> hmap, @QueryMap Map<String, Integer> qmap);
}
我的圈子适配器:
public class XrAdapter extends XRecyclerView.Adapter<XrAdapter.ItemViewHolder> {
private List<BeanMyCircle.ResultBean> list;
public XrAdapter(List<BeanMyCircle.ResultBean> list) {
this.list = list;
}
//加载条目布局
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_xr_layout, viewGroup, false);
return new ItemViewHolder(inflate);
}
//加载数据
@Override
public void onBindViewHolder(@NonNull ItemViewHolder itemViewHolder, int i) {
//每个条目
BeanMyCircle.ResultBean resultBean = list.get(i);
//描述
itemViewHolder.mItemText.setText(resultBean.getContent());
//图片
String image = resultBean.getImage();
String[] split = image.split(",");
for (int j = 0; j < split.length; j++) {
String s = split[j];
ImageView imageView = new ImageView(itemViewHolder.itemView.getContext());
//设置图片
Glide.with(itemViewHolder.itemView.getContext())
.load(s)
.error(R.drawable.afanti)
.placeholder(R.drawable.baofa)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(30,0)))
.into(imageView);
//添加到布局中
itemViewHolder.mItemImgLin.addView(imageView,200,200);
}
}
@Override
public int getItemCount() {
return list.size();
}
public class ItemViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.item_text)
TextView mItemText;
@BindView(R.id.item_img_lin)
LinearLayout mItemImgLin;
public ItemViewHolder(@NonNull View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
bean类:我的圈子、发布圈子
public class BeanMyCircle {
/**
* result : [{"commodityId":5,"content":"九月十八日","createTime":1568929008000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34786,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-19/8124720190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/6321920190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/9540720190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/8467220190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/2043520190919163648.jpeg","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"九月十八日","createTime":1568928992000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34785,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-19/0374220190919163632.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/5617220190919163632.jpeg","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"这是一个不咋的商品","createTime":1568901633000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34308,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-19/5824320190919090033.png","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"九月十八日","createTime":1568854680000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34270,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-18/0629320190918195800.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/8423720190918195800.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/4093720190918195800.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/7645020190918195800.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/7546820190918195800.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/1284720190918195800.jpeg","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"九月十八日","createTime":1568854657000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34269,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-18/1362920190918195737.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/5648120190918195737.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/0691820190918195737.jpeg","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"九月十八日","createTime":1568854613000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34268,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-18/5073120190918195653.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-18/3962120190918195653.jpeg","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"九月十八日","createTime":1568854232000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34267,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-18/6253120190918195032.jpeg","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"这是一个不咋的商品","createTime":1568839118000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34233,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-18/7182920190918153838.png","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1},{"commodityId":5,"content":"这是一个不咋的商品","createTime":1568825726000,"greatNum":0,"headPic":"http://172.17.8.100/images/small/default/user.jpg","id":34231,"image":"http://172.17.8.100/images/small/circle_pic/2019-09-18/2045720190918115526.png","nickName":"qR_0m2B3","userId":8173,"whetherGreat":1}]
* message : 查詢成功
* status : 0000
*/
private String message;
private String status;
@Override
public String toString() {
return "BeanMyCircle{" +
"message='" + message + '\'' +
", status='" + status + '\'' +
", result=" + result +
'}';
}
private List<ResultBean> result;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<ResultBean> getResult() {
return result;
}
public void setResult(List<ResultBean> result) {
this.result = result;
}
public static class ResultBean {
/**
* commodityId : 5
* content : 九月十八日
* createTime : 1568929008000
* greatNum : 0
* headPic : http://172.17.8.100/images/small/default/user.jpg
* id : 34786
* image : http://172.17.8.100/images/small/circle_pic/2019-09-19/8124720190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/6321920190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/9540720190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/8467220190919163648.jpeg,http://172.17.8.100/images/small/circle_pic/2019-09-19/2043520190919163648.jpeg
* nickName : qR_0m2B3
* userId : 8173
* whetherGreat : 1
*/
private int commodityId;
private String content;
private long createTime;
private int greatNum;
private String headPic;
private int id;
private String image;
private String nickName;
private int userId;
private int whetherGreat;
@Override
public String toString() {
return "ResultBean{" +
"commodityId=" + commodityId +
", content='" + content + '\'' +
", createTime=" + createTime +
", greatNum=" + greatNum +
", headPic='" + headPic + '\'' +
", id=" + id +
", image='" + image + '\'' +
", nickName='" + nickName + '\'' +
", userId=" + userId +
", whetherGreat=" + whetherGreat +
'}';
}
public int getCommodityId() {
return commodityId;
}
public void setCommodityId(int commodityId) {
this.commodityId = commodityId;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public long getCreateTime() {
return createTime;
}
public void setCreateTime(long createTime) {
this.createTime = createTime;
}
public int getGreatNum() {
return greatNum;
}
public void setGreatNum(int greatNum) {
this.greatNum = greatNum;
}
public String getHeadPic() {
return headPic;
}
public void setHeadPic(String headPic) {
this.headPic = headPic;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getWhetherGreat() {
return whetherGreat;
}
public void setWhetherGreat(int whetherGreat) {
this.whetherGreat = whetherGreat;
}
}
}
public class BeanReleaseCircle {
/**
* message : 发布成功
* status : 0000
*/
private String message;
private String status;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
契约类:
public interface Contract {
interface Home extends IBaseView {
}
abstract class Presenter extends BasePresenter {
public Presenter(IBaseView iBaseView) {
super(iBaseView);
}
public abstract void getData(Map<String ,String >hmap, Map<String ,Object>qmap, List<MultipartBody.Part>list);
public abstract void getMyCircleData(Map<String ,String >hmap, Map<String ,Integer>qmap);
}
}
P层:
public class PresenterImpl extends Contract.Presenter {
public PresenterImpl(IBaseView iBaseView) {
super(iBaseView);
}
//发布圈子
@Override
public void getData(Map<String, String> hmap, Map<String, Object> qmap, List<MultipartBody.Part> list) {
RxJavaUtil.getInstance().getCreate()
.getReleaseCircle(hmap, qmap, list)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<BeanReleaseCircle>() {
@Override
public void accept(BeanReleaseCircle beanReleaseCircle) throws Exception {
if ("0000".equals(beanReleaseCircle.getStatus())) {
String message = beanReleaseCircle.getMessage();
if (iBaseView != null) {
iBaseView.onSuccess(message);
}
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
if (iBaseView != null) {
iBaseView.onFailure(throwable.getMessage());
}
}
});
}
//我的圈子
@Override
public void getMyCircleData(Map<String, String> hmap, Map<String, Integer> qmap) {
RxJavaUtil.getInstance()
.getCreate()
.getMyCircle(hmap,qmap)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<BeanMyCircle>() {
@Override
public void accept(BeanMyCircle beanMyCircle) throws Exception {
if ("0000".equals(beanMyCircle.getStatus())){
List<BeanMyCircle.ResultBean> list = beanMyCircle.getResult();
if (iBaseView!=null){
iBaseView.onList(list);
}
//清空数据库
Dao.getdaoSession(App.sContext).getCircleDao().deleteAll();
//将bean转成json
String s = new Gson().toJson(beanMyCircle);
//将json存入表中
Circle circle = new Circle(null, s);
//将表存入数据库
Dao.getdaoSession(App.sContext).getCircleDao().insert(circle);
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
if (iBaseView != null) {
iBaseView.onFailure(throwable.getMessage());
}
}
});
}
//释放
public void onDestroy() {
if (iBaseView != null) {
iBaseView = null;
}
}
}
自定义view:
public class TitleView extends LinearLayout {
public TitleView(Context context) {
this(context,null);
}
public TitleView(Context context, AttributeSet attrs) {
this(context, attrs,-1);
}
public TitleView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//自定义属性
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TitleView);
//背景颜色
int bag_color = typedArray.getColor(R.styleable.TitleView_bag_color, Color.RED);
//加载布局
View inflate = LayoutInflater.from(getContext()).inflate(R.layout.title_layout, this, true);
LinearLayout viewById = inflate.findViewById(R.id.lin_ba);
//设置自定义属性
viewById.setBackgroundColor(bag_color);
//点击图片返回
ImageView imageView = inflate.findViewById(R.id.title_return);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (getCllBack!=null){
getCllBack.onTitle("已退出");
}
}
});
}
private GetCllBack getCllBack;
public void setGetCllBack(GetCllBack getCllBack) {
this.getCllBack = getCllBack;
}
public interface GetCllBack{
void onTitle(String string);
}
}
GreenDao:
表:
@Entity
public class Circle {
@Id(autoincrement=true)
private Long id;
private String json;
@Generated(hash = 1774100524)
public Circle(Long id, String json) {
this.id = id;
this.json = json;
}
@Generated(hash = 2062793395)
public Circle() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getJson() {
return this.json;
}
public void setJson(String json) {
this.json = json;
}
}
数据库 单例
public class Dao {
private static DaoSession daoSession = null;
public static DaoSession getdaoSession(Context context) {
if (daoSession == null) {
daoSession = DaoMaster.newDevSession(context, "bw,db");
}
return daoSession;
}
}
database三个方法:
CircleDao
public class CircleDao extends AbstractDao<Circle, Long> {
public static final String TABLENAME = "CIRCLE";
/**
* Properties of entity Circle.<br/>
* Can be used for QueryBuilder and for referencing column names.
*/
public static class Properties {
public final static Property Id = new Property(0, Long.class, "id", true, "_id");
public final static Property Json = new Property(1, String.class, "json", false, "JSON");
}
public CircleDao(DaoConfig config) {
super(config);
}
public CircleDao(DaoConfig config, DaoSession daoSession) {
super(config, daoSession);
}
/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "\"CIRCLE\" (" + //
"\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
"\"JSON\" TEXT);"); // 1: json
}
/** Drops the underlying database table. */
public static void dropTable(Database db, boolean ifExists) {
String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"CIRCLE\"";
db.execSQL(sql);
}
@Override
protected final void bindValues(DatabaseStatement stmt, Circle entity) {
stmt.clearBindings();
Long id = entity.getId();
if (id != null) {
stmt.bindLong(1, id);
}
String json = entity.getJson();
if (json != null) {
stmt.bindString(2, json);
}
}
@Override
protected final void bindValues(SQLiteStatement stmt, Circle entity) {
stmt.clearBindings();
Long id = entity.getId();
if (id != null) {
stmt.bindLong(1, id);
}
String json = entity.getJson();
if (json != null) {
stmt.bindString(2, json);
}
}
@Override
public Long readKey(Cursor cursor, int offset) {
return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
}
@Override
public Circle readEntity(Cursor cursor, int offset) {
Circle entity = new Circle( //
cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1) // json
);
return entity;
}
@Override
public void readEntity(Cursor cursor, Circle entity, int offset) {
entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
entity.setJson(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
}
@Override
protected final Long updateKeyAfterInsert(Circle entity, long rowId) {
entity.setId(rowId);
return rowId;
}
@Override
public Long getKey(Circle entity) {
if(entity != null) {
return entity.getId();
} else {
return null;
}
}
@Override
public boolean hasKey(Circle entity) {
return entity.getId() != null;
}
@Override
protected final boolean isEntityUpdateable() {
return true;
}
}
DaoMaster:
package com.bawei.yuekaomoni.database;
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;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/**
* Master of DAO (schema version 1): knows all DAOs.
*/
public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 1;
/** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) {
CircleDao.createTable(db, ifNotExists);
}
/** Drops underlying database table using DAOs. */
public static void dropAllTables(Database db, boolean ifExists) {
CircleDao.dropTable(db, ifExists);
}
/**
* WARNING: Drops all table on Upgrade! Use only during development.
* Convenience method using a {@link DevOpenHelper}.
*/
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(CircleDao.class);
}
public DaoSession newSession() {
return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
}
public DaoSession newSession(IdentityScopeType type) {
return new DaoSession(db, type, daoConfigMap);
}
/**
* Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
*/
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);
}
}
/** WARNING: Drops all table on Upgrade! Use only during development. */
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:
package com.bawei.yuekaomoni.database;
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;
import com.bawei.yuekaomoni.table.Circle;
import com.bawei.yuekaomoni.database.CircleDao;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/**
* {@inheritDoc}
*
* @see org.greenrobot.greendao.AbstractDaoSession
*/
public class DaoSession extends AbstractDaoSession {
private final DaoConfig circleDaoConfig;
private final CircleDao circleDao;
public DaoSession(Database db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig>
daoConfigMap) {
super(db);
circleDaoConfig = daoConfigMap.get(CircleDao.class).clone();
circleDaoConfig.initIdentityScope(type);
circleDao = new CircleDao(circleDaoConfig, this);
registerDao(Circle.class, circleDao);
}
public void clear() {
circleDaoConfig.clearIdentityScope();
}
public CircleDao getCircleDao() {
return circleDao;
}
}
package com.bawei.yuekaomoni.activity;
MyCircleActivity类:
/**
* 我的圈子
*/
public class MyCircleActivity extends BaseActivity implements Contract.Home {
@BindView(R.id.xr)
XRecyclerView mXr;
private Unbinder bind;
private static final String TAG = "MyCircleActivity";
private PresenterImpl presenter1;
private Map<String, String> hmap = new HashMap<>();
private Map<String, Integer> qmap = new HashMap<>();
private int page = 1;
List<BeanMyCircle.ResultBean> list_s = new ArrayList<>();
//布局
@Override
protected int initlayoutResID() {
return R.layout.activity_my_circle;
}
//注册
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO: add setContentView(...) invocation
bind = ButterKnife.bind(this);
findViewById(R.id.title_return).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyCircleActivity.this, "已退出", Toast.LENGTH_SHORT).show();
finish();
}
});
boolean net = RxJavaUtil.getInstance().getNet(this);
if (!net) {
Toast.makeText(this, "无网", Toast.LENGTH_SHORT).show();
List<Circle> list = Dao.getdaoSession(this).getCircleDao().queryBuilder().list();
if (list.size()>0){
String json = list.get(0).getJson();
List<BeanMyCircle.ResultBean> list1 = new Gson().fromJson(json, BeanMyCircle.class).getResult();
//适配器
XrAdapter xrAdapter = new XrAdapter(list1);
//线性
mXr.setLayoutManager(new LinearLayoutManager(this));
//设置适配器
mXr.setAdapter(xrAdapter);
}
return;
}
getShua(page);
mXr.setLoadingMoreEnabled(true);
mXr.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
list_s.clear();
page = 1;
getShua(page);
mXr.refreshComplete();
}
@Override
public void onLoadMore() {
page++;
getShua(page);
mXr.loadMoreComplete();
}
});
}
//对象
@Override
protected BasePresenter initPresenter() {
presenter1 = new PresenterImpl(this);
return presenter1;
}
//数据
@Override
protected void initData() {
}
private void getShua(int page) {
hmap.put(Api.USER_USERID, Api.USER_USERID_S);
hmap.put(Api.USER_SESSIONID, Api.USER_SESSIONID_S);
qmap.put(Api.USER_PAGE, page);
qmap.put(Api.USER_COUNT, 8);
presenter1.getMyCircleData(hmap, qmap);
}
//成功
@Override
public void onSuccess(String success) {
}
//集合
@Override
public void onList(List list) {
Log.i(TAG, "onList: " + list.toString());
list_s.addAll(list);
Log.i(TAG, "onList: "+list_s.size());
//适配器
XrAdapter xrAdapter = new XrAdapter(list_s);
//线性
mXr.setLayoutManager(new LinearLayoutManager(this));
//设置适配器
mXr.setAdapter(xrAdapter);
}
//失败
@Override
public void onFailure(String failure) {
Log.i(TAG, "onFailure: " + failure);
Toast.makeText(this, "" + failure, Toast.LENGTH_SHORT).show();
}
//释放
@Override
protected void onDestroy() {
super.onDestroy();
bind.unbind();
}
}
ReleaseCircleActivity类的方法:
/**
* 发布圈子
*/
public class ReleaseCircleActivity extends BaseActivity implements Contract.Home {
@BindView(R.id.tit)
TitleView mTit;
@BindView(R.id.add_text)
EditText mAddText;
@BindView(R.id.addlin)
LinearLayout mAddlin;
@BindView(R.id.addpictures)
ImageView mAddpictures;
private Unbinder bind;
private static final String TAG = "ReleaseCircleActivity";
private Map<String, String> hmap = new HashMap<>();
private Map<String, Object> qmap = new HashMap<>();
private List<MultipartBody.Part> list = new ArrayList<>();
private PresenterImpl presenter1;
private File file;
private int geshu = 0;
//布局
@Override
protected int initlayoutResID() {
return R.layout.activity_main;
}
//注册
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO: add setContentView(...) invocation
bind = ButterKnife.bind(this);
}
//获取成功
@Override
public void takeSuccess(TResult result) {
//获取图片
TImage image = result.getImage();
//获取图片路径
String originalPath = image.getOriginalPath();
//装进文件
file = new File(originalPath);
//提示选取图片数量
geshu++;
Toast.makeText(this, "第" + geshu + "张图片", Toast.LENGTH_SHORT).show();
try {
//用流读取文件
// FileInputStream fileInputStream = new FileInputStream(file);
ImageView imageView = new ImageView(this);
//将流转为BitmapFactory
// imageView.setImageBitmap(BitmapFactory.decodeStream(fileInputStream));
imageView.setImageBitmap(BitmapFactory.decodeFile(file.getPath()));
mAddlin.addView(imageView, 200, 200);
} catch (Exception e) {
e.printStackTrace();
}
//设置类型
MediaType parse = MediaType.parse("image/*");
//指定文件类型
RequestBody requestBody = RequestBody.create(parse, file);
//key 文件名 文件类型
MultipartBody.Part image1 = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
//添加到集合
list.add(image1);
}
//点击
@OnClick({R.id.tit, R.id.addpictures, R.id.btn_publish, R.id.title_return})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.tit:
break;
case R.id.addpictures://打开相册
if (geshu==5){
Toast.makeText(this, "最多选取5张图片", Toast.LENGTH_SHORT).show();
return;
}
TakePhoto takePhoto = getTakePhoto();
takePhoto.onPickFromGallery();
break;
case R.id.btn_publish://发表
String trim = mAddText.getText().toString().trim();
hmap.put(Api.USER_USERID, Api.USER_USERID_S);
hmap.put(Api.USER_SESSIONID, Api.USER_SESSIONID_S);
qmap.put(Api.USER_COMMODITYID, 5);
qmap.put(Api.USER_CONTENT, trim);
presenter1.getData(hmap, qmap, list);
break;
case R.id.title_return://退出
Toast.makeText(ReleaseCircleActivity.this, "已退出", Toast.LENGTH_SHORT).show();
//跳转
//startActivity(new Intent(ReleaseCircleActivity.this, MyCircleActivity.class));
finish();
break;
}
}
//对象
@Override
protected BasePresenter initPresenter() {
presenter1 = new PresenterImpl(this);
return presenter1;
}
//数据
@Override
protected void initData() {
PresenterImpl presenter1 = (PresenterImpl) presenter;
}
//成功
@Override
public void onSuccess(String success) {
Log.i(TAG, "onSuccess: " + success);
Toast.makeText(this, "" + success, Toast.LENGTH_SHORT).show();
//跳转
startActivity(new Intent(ReleaseCircleActivity.this, MyCircleActivity.class));
finish();
}
//集合
@Override
public void onList(List list) {
}
//失败
@Override
public void onFailure(String failure) {
Log.i(TAG, "onFailure: " + failure);
Toast.makeText(this, "可以不发表评论但必须选择一张图片", Toast.LENGTH_SHORT).show();
}
//释放
@Override
protected void onDestroy() {
super.onDestroy();
bind.unbind();
}
}