红米note3照相数据丢失

红米note3及个别手机在调用相机拍照时,点击拍照,如果关闭闪光灯,拍照会卡顿一下,接着屏幕白屏,之后是截屏界面。虽然可以截屏,也可以显示在imageview上。但是界面的数据丢了。查了很多资料。有的说是被回收了,但是日志里并没有走onDestroy()方法。但其实整个app其实是崩溃了。具体原因尚未找到。但是找到了一个方法。利用onSaveInstanceState()方法。

第一步:

我用的是takephoto三方框架,在拍照的时候会有一个方法takesuccess,里面有照片的路径我的思路是把这个路径存在本地,然后在取出来。sp存储大家可以写一个类,这里使用的是古老的方法。值得注意的是:

upload(compressPath);

这个方法,如果相机顺利完成照相的功能,那么就会走此方法,如果失败了,那么此方法就不会走。所以大家不用担心出现重复上传头像的情况。

private SharedPreferences sp;
private SharedPreferences.Editor editor;

public void takeSuccess(TResult result) {
    String compressPath = result.getImage().getCompressPath();
    Glide.with(this).load(compressPath).into(cv_head);
    //uploadPic(compressPath);
    
    sp = getSharedPreferences(Httpurl.USERID, Context.MODE_PRIVATE);
    editor = sp.edit();

    editor.putString("picUri", compressPath);
    editor.commit();


    MainApplication.picUri = sp.getString("picUri", "0");
    Log.e("2233", "takeSuccess: "+MainApplication.picUri );

    MainApplication.picUri = compressPath;
    upload(compressPath);
}

第二部:图片剪切相片后,会调用此方法。然后判断我们存储的user_id,如果为零,证明是崩溃了,需要重新获取。然后在调用上传图片的接口,把图片上传至服务器。然后调用getuser();方法,就是获取此界面信息的方法。如果不调用此方法,界面的数据为空。

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (MainApplication.user_id.equals("0")){
        sp = getSharedPreferences(Httpurl.USERID, MODE_PRIVATE);
        MainApplication.user_id = sp.getString("uid", "0");
        MainApplication.picUri = sp.getString("picUri", "0");


        upload(MainApplication.picUri);
        getuser();

    }
}
虽然方法不是很好,但是也能解决燃眉之急。如果哪位大神有更好的方法,欢迎留言。

猜你喜欢

转载自blog.csdn.net/qq_30299243/article/details/81052432