多图上传

第一步:根目录

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();
    }
}
 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值