Search in sources :

Example 1 with BmobFile

use of cn.bmob.v3.datatype.BmobFile in project CoCoin by Nightonke.

the class AccountBookTodayViewActivity method sync.

private void sync() {
    if (!SettingManager.getInstance().getLoggenOn()) {
        CoCoinUtil.showToast(mContext, R.string.login_tip);
    } else {
        syncSuccessNumber = 0;
        syncFailedNumber = 0;
        syncQueryDialog = new MaterialDialog.Builder(this).title(R.string.sync_querying_title).content(R.string.sync_querying_content).negativeText(R.string.cancel).progress(true, 0).onAny(new MaterialDialog.SingleButtonCallback() {

            @Override
            public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                if (which == DialogAction.NEGATIVE) {
                }
            }
        }).show();
        final User user = BmobUser.getCurrentUser(CoCoinApplication.getAppContext(), User.class);
        final MyQuery myQuery = new MyQuery();
        myQuery.setTask(++TaskManager.QUERY_UPDATE_TASK);
        myQuery.query = new BmobQuery<>();
        myQuery.query.addWhereEqualTo("userId", user.getObjectId());
        myQuery.query.setLimit(1);
        myQuery.query.findObjects(CoCoinApplication.getAppContext(), new FindListener<UploadInfo>() {

            @Override
            public void onSuccess(List<UploadInfo> object) {
                if (myQuery.getTask() != TaskManager.QUERY_UPDATE_TASK)
                    return;
                else {
                    syncQueryDialog.dismiss();
                    cloudRecordNumber = 0;
                    Calendar cal = null;
                    if (object.size() == 0) {
                    } else {
                        cloudRecordNumber = object.get(0).getRecordNumber();
                        cloudOldDatabaseUrl = object.get(0).getDatabaseUrl();
                        cloudOldDatabaseFileName = object.get(0).getFileName();
                        uploadObjectId = object.get(0).getObjectId();
                        cal = Calendar.getInstance();
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        try {
                            cal.setTime(sdf.parse(object.get(0).getUpdatedAt()));
                        } catch (ParseException p) {
                        }
                    }
                    String content = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_record_0) + cloudRecordNumber + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_record_1) + (cal == null ? CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_time_2) : CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_time_0) + CoCoinUtil.GetCalendarString(CoCoinApplication.getAppContext(), cal) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_time_1)) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_record_0) + RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_record_1) + (SettingManager.getInstance().getRecentlySyncTime() == null ? CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_time_2) : CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_time_0) + CoCoinUtil.GetCalendarString(CoCoinApplication.getAppContext(), SettingManager.getInstance().getRecentlySyncTime()) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_time_1)) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_choose_content);
                    syncChooseDialog = new MaterialDialog.Builder(mContext).title(R.string.sync_choose_title).content(content).positiveText(R.string.sync_to_cloud).negativeText(R.string.sync_to_mobile).neutralText(R.string.cancel).onAny(new MaterialDialog.SingleButtonCallback() {

                        @Override
                        public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                            syncChooseDialog.dismiss();
                            if (which == DialogAction.POSITIVE) {
                                // sync to cloud
                                String subContent = "";
                                if (RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() == 0) {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.mobile_record_empty);
                                    new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).show();
                                    return;
                                } else {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_cloud_0) + RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_cloud_1);
                                }
                                new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).negativeText(R.string.cancel).onAny(new MaterialDialog.SingleButtonCallback() {

                                    @Override
                                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                        if (which == DialogAction.POSITIVE) {
                                            syncProgressDialog = new MaterialDialog.Builder(mContext).title(R.string.syncing).content(CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.uploading_0) + "1" + CoCoinUtil.GetString(mContext, R.string.uploading_1)).progress(false, RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size(), true).cancelable(false).show();
                                            final String databasePath = CoCoinUtil.GetRecordDatabasePath(CoCoinApplication.getAppContext());
                                            //                                                                final BmobFile bmobFile = new BmobFile(new File(databasePath));
                                            //                                                                bmobFile.uploadblock(mContext, new UploadFileListener() {
                                            //
                                            //                                                                    @Override
                                            //                                                                    public void onSuccess() {
                                            //                                                                        if (BuildConfig.DEBUG) {
                                            //                                                                            Log.d("CoCoin", "Upload successfully fileName: " + databasePath);
                                            //                                                                            Log.d("CoCoin", "Upload successfully url: " + bmobFile.getFileUrl(mContext));
                                            //                                                                        }
                                            //                                                                        // the new database is uploaded successfully
                                            //                                                                        // delete the old database(if there is)
                                            //                                                                        if (cloudOldDatabaseUrl != null) {
                                            //                                                                            deleteOldDatabaseOnCloud(cloudOldDatabaseUrl);
                                            //                                                                        }
                                            //                                                                        // update the UploadInfo record for the new url
                                            //                                                                        if (uploadObjectId == null) {
                                            //                                                                            // first time
                                            //                                                                            UploadInfo uploadInfo = new UploadInfo();
                                            //                                                                            uploadInfo.setUserId(user.getObjectId());
                                            //                                                                            uploadInfo.setRecordNumber(RecordManager.getInstance(mContext).RECORDS.size());
                                            //                                                                            uploadInfo.setDatabaseUrl(bmobFile.getFileUrl(mContext));
                                            //                                                                            uploadInfo.save(mContext, new SaveListener() {
                                            //                                                                                @Override
                                            //                                                                                public void onSuccess() {
                                            //                                                                                    // upload successfully
                                            //                                                                                    syncProgressDialog.dismiss();
                                            //                                                                                    new MaterialDialog.Builder(mContext)
                                            //                                                                                            .title(R.string.sync_completely_title)
                                            //                                                                                            .content(RecordManager.getInstance(mContext).RECORDS.size() + CoCoinUtil.GetString(mContext, R.string.uploading_fail_1))
                                            //                                                                                            .positiveText(R.string.ok_1)
                                            //                                                                                            .show();
                                            //                                                                                }
                                            //                                                                                @Override
                                            //                                                                                public void onFailure(int code, String arg0) {
                                            //                                                                                    // 添加失败
                                            //                                                                                }
                                            //                                                                            });
                                            //                                                                        } else {
                                            //                                                                            UploadInfo uploadInfo = new UploadInfo();
                                            //                                                                            uploadInfo.setUserId(user.getObjectId());
                                            //                                                                            uploadInfo.setRecordNumber(RecordManager.getInstance(mContext).RECORDS.size());
                                            //                                                                            uploadInfo.setDatabaseUrl(bmobFile.getFileUrl(mContext));
                                            //                                                                            uploadInfo.update(mContext, uploadObjectId, new UpdateListener() {
                                            //                                                                                @Override
                                            //                                                                                public void onSuccess() {
                                            //                                                                                    // upload successfully
                                            //                                                                                    syncProgressDialog.dismiss();
                                            //                                                                                    new MaterialDialog.Builder(mContext)
                                            //                                                                                            .title(R.string.sync_completely_title)
                                            //                                                                                            .content(RecordManager.getInstance(mContext).RECORDS.size() + CoCoinUtil.GetString(mContext, R.string.uploading_fail_1))
                                            //                                                                                            .positiveText(R.string.ok_1)
                                            //                                                                                            .show();
                                            //                                                                                }
                                            //                                                                                @Override
                                            //                                                                                public void onFailure(int code, String msg) {
                                            //                                                                                    // upload failed
                                            //                                                                                    Log.i("bmob","更新失败:"+msg);
                                            //                                                                                }
                                            //                                                                            });
                                            //                                                                        }
                                            //                                                                    }
                                            //
                                            //                                                                    @Override
                                            //                                                                    public void onProgress(Integer value) {
                                            //                                                                        syncProgressDialog.setProgress(value);
                                            //                                                                    }
                                            //
                                            //                                                                    @Override
                                            //                                                                    public void onFailure(int code, String msg) {
                                            //                                                                        // upload failed
                                            //                                                                        if (BuildConfig.DEBUG) Log.d("CoCoin", "Upload database failed " + code + " " + msg);
                                            //                                                                        syncProgressDialog.dismiss();
                                            //                                                                        new MaterialDialog.Builder(mContext)
                                            //                                                                                .title(R.string.sync_failed)
                                            //                                                                                .content(R.string.uploading_fail_0)
                                            //                                                                                .positiveText(R.string.ok_1)
                                            //                                                                                .show();
                                            //                                                                    }
                                            //                                                                });
                                            BmobProFile.getInstance(CoCoinApplication.getAppContext()).upload(databasePath, new UploadListener() {

                                                @Override
                                                public void onSuccess(String fileName, String url, BmobFile file) {
                                                    CoCoinUtil.deleteBmobUploadCach(CoCoinApplication.getAppContext());
                                                    if (BuildConfig.DEBUG) {
                                                        Log.d("CoCoin", "Upload successfully fileName: " + fileName);
                                                        Log.d("CoCoin", "Upload successfully url: " + url);
                                                    }
                                                    // delete the old database(if there is)
                                                    if (cloudOldDatabaseFileName != null) {
                                                        deleteOldDatabaseOnCloud(cloudOldDatabaseFileName);
                                                    }
                                                    // update the UploadInfo record for the new url
                                                    UploadInfo uploadInfo = new UploadInfo();
                                                    uploadInfo.setUserId(user.getObjectId());
                                                    uploadInfo.setRecordNumber(RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size());
                                                    uploadInfo.setDatabaseUrl(file.getFileUrl(CoCoinApplication.getAppContext()));
                                                    uploadInfo.setFileName(fileName);
                                                    if (uploadObjectId == null) {
                                                        // insert
                                                        uploadInfo.save(CoCoinApplication.getAppContext(), new SaveListener() {

                                                            @Override
                                                            public void onSuccess() {
                                                                // upload successfully
                                                                syncProgressDialog.dismiss();
                                                                new MaterialDialog.Builder(mContext).title(R.string.sync_completely_title).content(RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.uploading_fail_1)).positiveText(R.string.ok_1).cancelable(false).show();
                                                            }

                                                            @Override
                                                            public void onFailure(int code, String arg0) {
                                                                uploadFailed(code, arg0);
                                                            }
                                                        });
                                                    } else {
                                                        // update
                                                        uploadInfo.update(CoCoinApplication.getAppContext(), uploadObjectId, new UpdateListener() {

                                                            @Override
                                                            public void onSuccess() {
                                                                // upload successfully
                                                                syncProgressDialog.dismiss();
                                                                new MaterialDialog.Builder(mContext).title(R.string.sync_completely_title).content(RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.uploading_fail_1)).positiveText(R.string.ok_1).cancelable(false).show();
                                                            }

                                                            @Override
                                                            public void onFailure(int code, String msg) {
                                                                uploadFailed(code, msg);
                                                            }
                                                        });
                                                    }
                                                }

                                                @Override
                                                public void onProgress(int progress) {
                                                    syncProgressDialog.setProgress((int) (progress * 1.0 / 100 * RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size()));
                                                }

                                                @Override
                                                public void onError(int statuscode, String errormsg) {
                                                    // upload failed
                                                    uploadFailed(statuscode, errormsg);
                                                }
                                            });
                                        }
                                    }
                                }).show();
                            } else if (which == DialogAction.NEGATIVE) {
                                // sync to mobile
                                String subContent = "";
                                if (cloudRecordNumber == 0) {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.cloud_record_empty);
                                    new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).show();
                                    return;
                                } else {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_mobile_0) + cloudRecordNumber + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_mobile_1);
                                }
                                new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).negativeText(R.string.cancel).onAny(new MaterialDialog.SingleButtonCallback() {

                                    @Override
                                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                        if (which == DialogAction.POSITIVE) {
                                            syncProgressDialog = new MaterialDialog.Builder(mContext).title(R.string.syncing).content(CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.downloading_0) + "1" + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.downloading_1)).progress(false, cloudRecordNumber, true).cancelable(false).show();
                                            // download the database file to mobile
                                            BmobProFile.getInstance(CoCoinApplication.getAppContext()).download(cloudOldDatabaseFileName, new DownloadListener() {

                                                @Override
                                                public void onSuccess(String fullPath) {
                                                    // copy the new database to mobile
                                                    try {
                                                        Log.d("CoCoin", "Download successfully " + fullPath);
                                                        syncProgressDialog.setContent(R.string.sync_completely_content);
                                                        byte[] buffer = new byte[1024];
                                                        File file = new File(fullPath);
                                                        InputStream inputStream = new FileInputStream(file);
                                                        String outFileNameString = CoCoinUtil.GetRecordDatabasePath(CoCoinApplication.getAppContext());
                                                        OutputStream outputStream = new FileOutputStream(outFileNameString);
                                                        int length;
                                                        while ((length = inputStream.read(buffer)) > 0) {
                                                            outputStream.write(buffer, 0, length);
                                                        }
                                                        Log.d("CoCoin", "Download successfully copy completely");
                                                        outputStream.flush();
                                                        outputStream.close();
                                                        inputStream.close();
                                                        file.delete();
                                                        Log.d("CoCoin", "Download successfully delete completely");
                                                        // refresh data
                                                        RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.clear();
                                                        RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS = null;
                                                        RecordManager.getInstance(CoCoinApplication.getAppContext());
                                                        todayModeAdapter.notifyDataSetChanged();
                                                        Log.d("CoCoin", "Download successfully refresh completely");
                                                        syncProgressDialog.dismiss();
                                                        new MaterialDialog.Builder(mContext).title(R.string.sync_completely_title).content(cloudRecordNumber + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.downloading_fail_1)).positiveText(R.string.ok_1).cancelable(false).show();
                                                    } catch (IOException i) {
                                                        i.printStackTrace();
                                                    }
                                                }

                                                @Override
                                                public void onProgress(String localPath, int percent) {
                                                    syncProgressDialog.setProgress((int) (((float) percent / 100) * RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size()));
                                                }

                                                @Override
                                                public void onError(int statuscode, String errormsg) {
                                                    downloadFailed(statuscode, errormsg);
                                                }
                                            });
                                        }
                                    }
                                }).show();
                            } else {
                            }
                        }
                    }).show();
                }
            }

            @Override
            public void onError(int code, String msg) {
                syncQueryDialog.dismiss();
                if (BuildConfig.DEBUG)
                    Log.d("CoCoin", "Query: " + msg);
                if (syncQueryDialog != null)
                    syncQueryDialog.dismiss();
                new MaterialDialog.Builder(mContext).title(R.string.sync_querying_fail_title).content(R.string.sync_querying_fail_content).positiveText(R.string.ok_1).show();
            }
        });
    }
}
Also used : SaveListener(cn.bmob.v3.listener.SaveListener) BmobUser(cn.bmob.v3.BmobUser) User(com.nightonke.saver.model.User) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) UploadListener(com.bmob.btp.callback.UploadListener) NonNull(android.support.annotation.NonNull) UpdateListener(cn.bmob.v3.listener.UpdateListener) BmobFile(cn.bmob.v3.datatype.BmobFile) UploadInfo(com.nightonke.saver.model.UploadInfo) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Calendar(java.util.Calendar) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) DownloadListener(com.bmob.btp.callback.DownloadListener) DialogAction(com.afollestad.materialdialogs.DialogAction) FileOutputStream(java.io.FileOutputStream) MyQuery(com.nightonke.saver.ui.MyQuery) ParseException(java.text.ParseException) SimpleDateFormat(java.text.SimpleDateFormat) BmobFile(cn.bmob.v3.datatype.BmobFile) BmobProFile(com.bmob.BmobProFile) File(java.io.File)

Example 2 with BmobFile

use of cn.bmob.v3.datatype.BmobFile in project CoCoin by Nightonke.

the class AccountBookSettingActivity method uploadLogoToServer.

// update a logo to server//////////////////////////////////////////////////////////////////////////
private void uploadLogoToServer() {
    if (!SettingManager.getInstance().getHasLogo()) {
        // the user haven't set the logo
        return;
    }
    final File file = new File(CoCoinApplication.getAppContext().getFilesDir() + CoCoinUtil.LOGO_NAME);
    final User user = getCurrentUser();
    // if login/////////////////////////////////////////////////////////////////////////////////////////
    if (user != null) {
        if (user.getLogoObjectId() != "") {
            // if the logo id is not null, then there must be a logo and a logo file in the server//////////////
            // judge whether there is an old logo of the same user//////////////////////////////////////////////
            BmobQuery<Logo> bmobQuery = new BmobQuery();
            bmobQuery.addWhereEqualTo("objectId", user.getLogoObjectId());
            bmobQuery.findObjects(CoCoinApplication.getAppContext(), new FindListener<Logo>() {

                @Override
                public void onSuccess(List<Logo> object) {
                    // there has been an old logo in the server/////////////////////////////////////////////////////////
                    // then there must be an old logo file in server////////////////////////////////////////////////////
                    // then we should delete the old one////////////////////////////////////////////////////////////////
                    Log.d("Saver", "There is an old logo");
                    String url = object.get(0).getFile().getUrl();
                    BmobFile oldLogoFile = new BmobFile();
                    oldLogoFile.setUrl(url);
                    oldLogoFile.delete(CoCoinApplication.getAppContext(), new DeleteListener() {

                        @Override
                        public void onSuccess() {
                            Log.d("Saver", "Successfully delete the old logo.");
                            // after delete, we should upload a new logo file///////////////////////////////////////////////////
                            final BmobFile newLogoFile = new BmobFile(file);
                            newLogoFile.uploadblock(CoCoinApplication.getAppContext(), new UploadFileListener() {

                                @Override
                                public void onSuccess() {
                                    // after upload the new logo file, we should put the new logo the Logo table////////////////////////
                                    Logo newLogo = new Logo(newLogoFile);
                                    newLogo.update(CoCoinApplication.getAppContext(), user.getLogoObjectId(), new UpdateListener() {

                                        @Override
                                        public void onSuccess() {
                                            Log.d("Saver", "Update logo successfully");
                                        }

                                        @Override
                                        public void onFailure(int arg0, String arg1) {
                                            Log.d("Saver", "Update logo failed " + arg1);
                                        }
                                    });
                                }

                                @Override
                                public void onProgress(Integer arg0) {
                                }

                                @Override
                                public void onFailure(int arg0, String arg1) {
                                    Log.d("Saver", "Upload failed " + arg1);
                                }
                            });
                        }

                        @Override
                        public void onFailure(int code, String msg) {
                            Log.d("Saver", "Fail to delete the old logo. " + msg);
                        }
                    });
                }

                @Override
                public void onError(int code, String msg) {
                    // the picture is lost
                    Log.d("Saver", "Can't find the old logo in server.");
                }
            });
        } else {
            // the user has no logo before//////////////////////////////////////////////////////////////////////
            final BmobFile newLogoFile = new BmobFile(file);
            newLogoFile.uploadblock(CoCoinApplication.getAppContext(), new UploadFileListener() {

                @Override
                public void onSuccess() {
                    String url = newLogoFile.getFileUrl(CoCoinApplication.getAppContext());
                    Log.d("Saver", "Upload successfully " + url);
                    final Logo newLogo = new Logo(newLogoFile);
                    newLogo.save(CoCoinApplication.getAppContext(), new SaveListener() {

                        @Override
                        public void onSuccess() {
                            Log.d("Saver", "Save the new logo successfully.");
                            SettingManager.getInstance().setLogoObjectId(newLogo.getObjectId());
                            updateSettingsToServer(UPDATE_LOGO_ID);
                        }

                        @Override
                        public void onFailure(int i, String s) {
                            Log.d("Saver", "Save the new logo fail.");
                        }
                    });
                }

                @Override
                public void onProgress(Integer arg0) {
                }

                @Override
                public void onFailure(int arg0, String arg1) {
                    Log.d("Saver", "Upload failed " + arg1);
                }
            });
        }
    }
}
Also used : SaveListener(cn.bmob.v3.listener.SaveListener) BmobUser(cn.bmob.v3.BmobUser) User(com.nightonke.saver.model.User) UploadFileListener(cn.bmob.v3.listener.UploadFileListener) Logo(com.nightonke.saver.model.Logo) BmobQuery(cn.bmob.v3.BmobQuery) DeleteListener(cn.bmob.v3.listener.DeleteListener) UpdateListener(cn.bmob.v3.listener.UpdateListener) BmobFile(cn.bmob.v3.datatype.BmobFile) File(java.io.File) BmobFile(cn.bmob.v3.datatype.BmobFile)

Example 3 with BmobFile

use of cn.bmob.v3.datatype.BmobFile in project Palm300Heroes by nicolite.

the class UserInfoActivity method onActivityResult.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    PermissionUtils.getInstance().requestPermission(this, 100, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (requestCode == REQUEST_CODE_CHOOSE_PICTURE && resultCode == RESULT_OK) {
        List<Uri> uriList = Matisse.obtainResult(data);
        for (Uri uri : uriList) {
            Intent intent = new Intent();
            intent.setAction("com.android.camera.action.CROP");
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            // mUri是已经选择的图片Uri
            intent.setDataAndType(uri, "image/*");
            intent.putExtra("crop", "true");
            // 裁剪框比例
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            // 输出图片大小
            intent.putExtra("outputX", 150);
            intent.putExtra("outputY", 150);
            intent.putExtra("return-data", true);
            startActivityForResult(intent, REQUEST_CODE_PICTURE_CUT);
        }
    } else if (requestCode == REQUEST_CODE_PICTURE_CUT && resultCode == RESULT_OK) {
        try {
            Bitmap bitmap = data.getParcelableExtra("data");
            File file = new File(Environment.getExternalStorageDirectory(), "P300Heroes/");
            if (!file.exists()) {
                boolean mkdir = file.mkdir();
                if (!mkdir) {
                    ToastUtils.showToastShort("创建文件失败,请检查是否给予文件读写权限!");
                    return;
                }
            }
            File file2 = new File(Environment.getExternalStorageDirectory(), "P300Heroes/cache/");
            if (!file2.exists()) {
                boolean mkdir = file2.mkdir();
                if (!mkdir) {
                    ToastUtils.showToastShort("创建文件失败,请检查是否给予文件读写权限!");
                    return;
                }
            }
            final File file1 = new File(file, userData.getUsername() + "_" + System.currentTimeMillis() + ".jpg");
            FileOutputStream fileOutputStream = new FileOutputStream(file1);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 80, fileOutputStream);
            fileOutputStream.flush();
            fileOutputStream.close();
            final BmobFile bmobFile = new BmobFile(file1);
            bmobFile.uploadblock(new UploadFileListener() {

                @Override
                public void done(BmobException e) {
                    if (e == null) {
                        user.setAvatar(bmobFile);
                        Glide.with(UserInfoActivity.this).load(file1).bitmapTransform(new CropCircleTransformation(UserInfoActivity.this)).centerCrop().crossFade().into(userAvatar);
                        saveUserInfo(user);
                        if (file1.exists() && file1.isFile()) {
                            file1.delete();
                        }
                    } else {
                        ToastUtils.showToastShort("图片上传失败!" + e.toString());
                    }
                }

                @Override
                public void onProgress(Integer value) {
                    super.onProgress(value);
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Also used : Bitmap(android.graphics.Bitmap) BmobException(cn.bmob.v3.exception.BmobException) FileOutputStream(java.io.FileOutputStream) UploadFileListener(cn.bmob.v3.listener.UploadFileListener) CropCircleTransformation(jp.wasabeef.glide.transformations.CropCircleTransformation) Intent(android.content.Intent) IOException(java.io.IOException) Uri(android.net.Uri) BmobFile(cn.bmob.v3.datatype.BmobFile) File(java.io.File) BmobFile(cn.bmob.v3.datatype.BmobFile)

Aggregations

BmobFile (cn.bmob.v3.datatype.BmobFile)3 File (java.io.File)3 BmobUser (cn.bmob.v3.BmobUser)2 SaveListener (cn.bmob.v3.listener.SaveListener)2 UpdateListener (cn.bmob.v3.listener.UpdateListener)2 UploadFileListener (cn.bmob.v3.listener.UploadFileListener)2 User (com.nightonke.saver.model.User)2 FileOutputStream (java.io.FileOutputStream)2 IOException (java.io.IOException)2 Intent (android.content.Intent)1 Bitmap (android.graphics.Bitmap)1 Uri (android.net.Uri)1 NonNull (android.support.annotation.NonNull)1 BmobQuery (cn.bmob.v3.BmobQuery)1 BmobException (cn.bmob.v3.exception.BmobException)1 DeleteListener (cn.bmob.v3.listener.DeleteListener)1 DialogAction (com.afollestad.materialdialogs.DialogAction)1 MaterialDialog (com.afollestad.materialdialogs.MaterialDialog)1 BmobProFile (com.bmob.BmobProFile)1 DownloadListener (com.bmob.btp.callback.DownloadListener)1