实现QQ上传图片

版权声明:com.anleiya.www https://blog.csdn.net/weixin_42996187/article/details/82826731

1.导入依赖
implementation ‘de.hdodenhof:circleimageview:2.2.0’
implementation ‘org.xutils:xutils:3.3.40’

2…首先创建一个初始化类

package com.example.gone_05;

import android.app.Application;
import org.xutils.x;

public class App extends Application {

@Override
public void onCreate() {
    super.onCreate();
    x.Ext.init(this);
}

}
3.布局页面

<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/mHeader_iv"
android:layout_width=“200dp”
android:layout_height=“200dp”
android:layout_gravity=“center_horizontal”
android:layout_marginTop=“50dp”
android:src="#E4E3E3" />
<android.support.v4.widget.Space
android:layout_width=“match_parent”
android:layout_height=“0dp”
android:layout_weight=“1”/>



4.代码操作
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import org.xutils.common.util.KeyValue;
import org.xutils.common.util.LogUtil;
import org.xutils.http.RequestParams;
import org.xutils.http.body.MultipartBody;
import org.xutils.x;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ImageView mHeader_iv;
//相册请求码
private static final int ALBUM_REQUEST_CODE = 1;
//相机请求码
private static final int CAMERA_REQUEST_CODE = 2;
//剪裁请求码
private static final int CROP_REQUEST_CODE = 3;
//调用照相机返回图片文件
private File tempFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
initView();
}
private void initView() {
mHeader_iv = (ImageView) findViewById(R.id.mHeader_iv);
Button mGoCamera_btn = (Button) findViewById(R.id.mGoCamera_btn);
Button mGoAlbm_btn = (Button) findViewById(R.id.mGoAlbm_btn);
Button mUpload_btn = (Button) findViewById(R.id.mUpload_btn);
mGoCamera_btn.setOnClickListener(this);
mGoAlbm_btn.setOnClickListener(this);
mUpload_btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.mGoCamera_btn:
getPicFromCamera();
break;
case R.id.mGoAlbm_btn:
getPicFromAlbm();
break;
case R.id.mUpload_btn:
getPicFromUpload();
break;
default:
break;
}
}

/**
 * 上传图片
 */
private void getPicFromUpload(){
    RequestParams requestParams = new RequestParams("http://39.107.224.233/firstga/app/users/uploadHeadImage");
    requestParams.setMultipart(true);
    requestParams.setAsJsonContent(true);
    List<KeyValue> list = new ArrayList<>();
    list.add(new KeyValue("headImageFile", new File(String.valueOf(tempFile))));//文件
    list.add(new KeyValue("userId", "d56ea66e7ee741f498ca51242c8c6394"));//具体请求参数
    MultipartBody body = new MultipartBody(list, "UTF-8");
    requestParams.setRequestBody(body);
    x.http().post(requestParams, new org.xutils.common.Callback.CommonCallback<String>() {
        @Override
        public void onSuccess(String result) {
            LogUtil.e("请求结果:" + result);
        }

        @Override
        public void onFinished() {
            //上传完成
            Toast.makeText(MainActivity.this, "上传完成", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancelled(CancelledException cex) {
            //取消上传
        }

        @Override
        public void onError(Throwable ex, boolean isOnCallback) {
            //上传失败
            LogUtil.e("请求失败:" + ex.toString());

        }
    });
}
/**
 * 从相机获取图片
 */
private void getPicFromCamera() {
    //用于保存调用相机拍照后所生成的文件
    tempFile = new File(Environment.getExternalStorageDirectory().getPath(), System.currentTimeMillis() + ".jpg");
    //跳转到调用系统相机
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //判断版本
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {   //如果在Android7.0以上,使用FileProvider获取Uri
        intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        Uri contentUri = FileProvider.getUriForFile(MainActivity.this, "com.hansion.chosehead", tempFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
        Log.e("dasd", contentUri.toString());
    } else {    //否则使用Uri.fromFile(file)方法获取Uri
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
    }
    startActivityForResult(intent, CAMERA_REQUEST_CODE);
}
/**
 * 从相册获取图片
 */
private void getPicFromAlbm() {
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE);
}
/**
 * 裁剪图片
 */
private void cropPhoto(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("outputX", 300);
    intent.putExtra("outputY", 300);
    intent.putExtra("return-data", true);
    startActivityForResult(intent, CROP_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    switch (requestCode) {
        case CAMERA_REQUEST_CODE:   //调用相机后返回
            if (resultCode == RESULT_OK) {
                //用相机返回的照片去调用剪裁也需要对Uri进行处理
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    Uri contentUri = FileProvider.getUriForFile(MainActivity.this, "com.hansion.chosehead", tempFile);
                    cropPhoto(contentUri);
                } else {
                    cropPhoto(Uri.fromFile(tempFile));
                }
            }
            break;
        case ALBUM_REQUEST_CODE:    //调用相册后返回
            if (resultCode == RESULT_OK) {
                Uri uri = intent.getData();
                cropPhoto(uri);
            }
            break;
        case CROP_REQUEST_CODE:     //调用剪裁后返回
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                //在这里获得了剪裁后的Bitmap对象,可以用于上传
                Bitmap image = bundle.getParcelable("data");
                //设置到ImageView上
                mHeader_iv.setImageBitmap(image);
                //也可以进行一些保存、压缩等操作后上传

// String path = saveImage(“crop”, image);
}
break;
}
}
public String saveImage(String name, Bitmap bmp) {
File appDir = new File(Environment.getExternalStorageDirectory().getPath());
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = name + “.jpg”;
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
return file.getAbsolutePath();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
5.最后一步别忘了加权限

6.最后一步就是清单文件配置声明创建的APP类
android:name=".App"

猜你喜欢

转载自blog.csdn.net/weixin_42996187/article/details/82826731
今日推荐