老师我在本节课注册页面的基础上加了一个设置头像用UCrop剪切后不回调onActivityResult方法

来源:6-14 客户端注册功能实现-3

NickCharlie

2020-02-23

老师我在本节课注册页面的基础上加了一个设置头像用UCrop剪切后不回调onActivityResult方法,是按照之前更新用户信息的方法写的,选取图片的路径没有问题,
mPortraits也成功绑定控件,没有问题
之前学更新信息的时候也可以显示,暂时没找到是什么问题。

RegisterFragment.java
package ink.techat.client.push.fragments.account;


import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.bumptech.glide.Glide;
import com.yalantis.ucrop.UCrop;

import java.io.File;

import butterknife.BindView;
import butterknife.OnClick;
import ink.techat.client.common.app.Application;
import ink.techat.client.common.app.Fragment;
import ink.techat.client.common.widget.PortraitView;
import ink.techat.client.factory.Factory;
import ink.techat.client.factory.net.UploadHelper;
import ink.techat.client.push.R;
import ink.techat.client.push.fragments.media.GalleryFragment;

import static android.app.Activity.RESULT_OK;

/**
 * 用于注册的Fragment
 * @author NickCharlie
 */
public class RegisterFragment extends Fragment {
    private AccountTrigger mAccountTrigger;
    @BindView(R.id.img_register_portraits)
    PortraitView mPortraits;


    public RegisterFragment() {
        // Required empty public constructor
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        // 拿到Activity的引用
        mAccountTrigger = (AccountTrigger) context;
    }

    @Override
    protected int getContentLayoutId() {
        return R.layout.fragment_register;
    }



    @OnClick(R.id.img_register_portraits)
    void onPortraitClick(){
        new GalleryFragment()
                .setmListener(new GalleryFragment.OnSelectedListener() {
                    @Override
                    public void onSelectedImage(String path) {
                        UCrop.Options options = new UCrop.Options();
                        // 设置图片处理的格式JPEG
                        options.setCompressionFormat(Bitmap.CompressFormat.JPEG);
                        // 设置压缩后的图片精度
                        options.setCompressionQuality(96);
                        // 得到头像的缓存地址
                        File dPath = Application.getPortraitTmpFile();

                        UCrop.of(Uri.fromFile(new File(path)), Uri.fromFile(dPath))
                                .withAspectRatio(1, 1)                  // 1:1比例
                                .withMaxResultSize(520, 520)    // 返回最大的尺寸
                                .withOptions(options)                        // 加载相关参数
                                .start(getActivity());                     // 启动
                    }
                    // show的时候建议用getChildFragmentManager
                }).show(getChildFragmentManager(), GalleryFragment.class.getName());
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == UCrop.REQUEST_CROP) {
            final Uri resultUri = UCrop.getOutput(data);
            if(resultUri != null){
                loadPortrait(resultUri);
            }
        } else if (resultCode == UCrop.RESULT_ERROR) {
            //noinspection ThrowableNotThrown
            final Throwable cropError = UCrop.getError(data);
        }
    }

    /**
     * 加载Uri图像到当前的头像中
     * @param uri Uri
     */
    private void loadPortrait(Uri uri){
        if (this != null){
            Log.i("提醒", String.valueOf(this));
            Glide.with(this)
                    .asBitmap()
                    .load(uri)
                    .centerCrop()
                    .into(mPortraits);
        }

        // 拿到本地文件的地址
        final String localPath = uri.getPath();
        Log.i("localPath-TAG", "localPath:" + localPath);

        Factory.runOnAsync(new Runnable() {
            @Override
            public void run() {
                String url = UploadHelper.uploadPortrait(localPath);
                Log.i("localPath-URL", "url:" + url);
            }
        });
    }
}

写回答

1回答

Qiujuer

2020-02-24

你这边是剪切后,没有返回,还是返回了没有触发页面回调啊?

0
3
Qiujuer
回复
NickCharlie
也是可以的,不过启动的时候代码有点儿不一样
2020-02-24
共3条回复

手把手开发完整的即时通讯App 客户端+服务端+MVP架构

客户端+服务端+MVP架构+封装思想+主流框架

1757 学习 · 874 问题

查看课程