• 图片上传(一)


    应用场景:上传图片或拍照上传

    实际情况根据个人情况更改。

    上代码:

    MainActivity:

    package com.example.one2012;

    import java.util.HashMap;
    import java.util.Map;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    import android.widget.Toast;

    import com.example.one2012.UploadUtil.OnUploadProcessListener;

    public class MainActivity extends Activity implements OnClickListener,
    OnUploadProcessListener {
    private static final String TAG = "uploadImage";

    /**
    * 去上传文件
    */
    protected static final int TO_UPLOAD_FILE = 1;
    /**
    * 上传文件响应
    */
    protected static final int UPLOAD_FILE_DONE = 2; //
    /**
    * 选择文件
    */
    public static final int TO_SELECT_PHOTO = 3;
    /**
    * 上传初始化
    */
    private static final int UPLOAD_INIT_PROCESS = 4;
    /**
    * 上传中
    */
    private static final int UPLOAD_IN_PROCESS = 5;
    /***
    * 这里的这个URL是我服务器的javaEE环境URL
    */
    private static String requestURL = "http://192.168.10.160:8080/fileUpload/p/file!upload";

    private Button selectButton, uploadButton;
    private ImageView imageView;
    private TextView uploadImageResult;
    private ProgressBar progressBar;

    private String picPath = null;
    private ProgressDialog progressDialog;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    }

    /**
    * 初始化数据
    */
    private void initView() {
    selectButton = (Button) this.findViewById(R.id.selectImage);
    uploadButton = (Button) this.findViewById(R.id.uploadImage);
    selectButton.setOnClickListener(this);
    uploadButton.setOnClickListener(this);
    imageView = (ImageView) this.findViewById(R.id.imageView);
    uploadImageResult = (TextView) findViewById(R.id.uploadImageResult);
    progressDialog = new ProgressDialog(this);
    progressBar = (ProgressBar) findViewById(R.id.progressBar1);
    }

    @Override
    public void onClick(View v) {
    switch (v.getId()) {
    case R.id.selectImage:
    Intent intent = new Intent(this, SelectPicActivity.class);
    startActivityForResult(intent, TO_SELECT_PHOTO);
    break;
    case R.id.uploadImage:
    if (picPath != null) {
    Log.v("获取到的图片路径是:::", picPath);
    handler.sendEmptyMessage(TO_UPLOAD_FILE);
    } else {
    Toast.makeText(this, "上传的文件路径出错", Toast.LENGTH_LONG).show();
    }
    break;
    default:
    break;
    }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO) {
    picPath = data.getStringExtra(SelectPicActivity.KEY_PHOTO_PATH);
    Log.i(TAG, "最终选择的图片=" + picPath);
    Bitmap bm = BitmapFactory.decodeFile(picPath);
    imageView.setImageBitmap(bm);
    }
    super.onActivityResult(requestCode, resultCode, data);
    }

    /**
    * 上传服务器响应回调
    */
    @Override
    public void onUploadDone(int responseCode, String message) {
    progressDialog.dismiss();
    Message msg = Message.obtain();
    msg.what = UPLOAD_FILE_DONE;
    msg.arg1 = responseCode;
    msg.obj = message;
    handler.sendMessage(msg);
    }

    private void toUploadFile() {
    uploadImageResult.setText("正在上传中...");
    progressDialog.setMessage("正在上传文件...");
    progressDialog.show();

    String fileKey = "pic";
    UploadUtil uploadUtil = UploadUtil.getInstance();
    uploadUtil.setOnUploadProcessListener(this); // 设置监听器监听上传状态

    Map<String, String> params = new HashMap<String, String>();
    params.put("orderId", "11111");
    uploadUtil.uploadFile(picPath, fileKey, requestURL, params);
    }

    private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    switch (msg.what) {
    case TO_UPLOAD_FILE:
    toUploadFile();
    break;

    case UPLOAD_INIT_PROCESS:
    progressBar.setMax(msg.arg1);
    break;
    case UPLOAD_IN_PROCESS:
    progressBar.setProgress(msg.arg1);
    break;
    case UPLOAD_FILE_DONE:
    String result = "响应码:" + msg.arg1 + " 响应信息:" + msg.obj
    + " 耗时:" + UploadUtil.getRequestTime() + "秒";
    uploadImageResult.setText(result);
    break;
    default:
    break;
    }
    super.handleMessage(msg);
    }

    };

    @Override
    public void onUploadProcess(int uploadSize) {
    Message msg = Message.obtain();
    msg.what = UPLOAD_IN_PROCESS;
    msg.arg1 = uploadSize;
    handler.sendMessage(msg);
    }

    @Override
    public void initUpload(int fileSize) {
    Message msg = Message.obtain();
    msg.what = UPLOAD_INIT_PROCESS;
    msg.arg1 = fileSize;
    handler.sendMessage(msg);
    }

    }

    ========

    selectpictureActivity:

    package com.example.one2012;

    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.Toast;

    /**
    * @author spring sky<br>
    说明:主要用于选择文件操作
    */

    public class SelectPicActivity extends Activity implements OnClickListener {

    /***
    * 使用照相机拍照获取图片
    */
    public static final int SELECT_PIC_BY_TACK_PHOTO = 1;
    /***
    * 使用相册中的图片
    */
    public static final int SELECT_PIC_BY_PICK_PHOTO = 2;

    /***
    * 从Intent获取图片路径的KEY
    */
    public static final String KEY_PHOTO_PATH = "photo_path";

    private static final String TAG = "SelectPicActivity";

    private LinearLayout dialogLayout;
    private Button takePhotoBtn, pickPhotoBtn, cancelBtn;

    /** 获取到的图片路径 */
    private String picPath;

    private Intent lastIntent;

    private Uri photoUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.select_pic_layout);
    initView();
    }
    /**
    * 初始化加载View
    */
    private void initView() {
    dialogLayout = (LinearLayout) findViewById(R.id.dialog_layout);
    dialogLayout.setOnClickListener(this);
    takePhotoBtn = (Button) findViewById(R.id.btn_take_photo);
    takePhotoBtn.setOnClickListener(this);
    pickPhotoBtn = (Button) findViewById(R.id.btn_pick_photo);
    pickPhotoBtn.setOnClickListener(this);
    cancelBtn = (Button) findViewById(R.id.btn_cancel);
    cancelBtn.setOnClickListener(this);
    lastIntent = getIntent();
    }

    @Override
    public void onClick(View v) {
    switch (v.getId()) {
    case R.id.dialog_layout:
    finish();
    break;
    case R.id.btn_take_photo:
    takePhoto();
    break;
    case R.id.btn_pick_photo:
    pickPhoto();
    break;
    default:
    finish();
    break;
    }
    }

    /**
    * 拍照获取图片
    */
    private void takePhoto() {
    // 执行拍照前,应该先判断SD卡是否存在
    String SDState = Environment.getExternalStorageState();
    if (SDState.equals(Environment.MEDIA_MOUNTED)) {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"
    /***
    * 需要说明一下,以下操作使用照相机拍照,拍照后的图片会存放在相册中的 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图
    * 如果不实用ContentValues存放照片路径的话,拍照后获取的图片为缩略图不清晰
    */
    ContentValues values = new ContentValues();
    photoUri = this.getContentResolver().insert(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);
    /** ----------------- */
    startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
    } else {
    Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show();
    }
    }

    /***
    * 从相册中取图片
    */
    private void pickPhoto() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    finish();
    return super.onTouchEvent(event);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
    doPhoto(requestCode, data);
    }
    super.onActivityResult(requestCode, resultCode, data);
    }

    /**
    * 选择图片后,获取图片的路径
    *
    * @param requestCode
    * @param data
    */
    private void doPhoto(int requestCode, Intent data) {
    if (requestCode == SELECT_PIC_BY_PICK_PHOTO) // 从相册取图片,有些手机有异常情况,请注意
    {
    if (data == null) {
    Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
    return;
    }
    photoUri = data.getData();
    if (photoUri == null) {
    Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
    return;
    }
    }
    String[] pojo = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(photoUri, pojo, null, null, null);
    if (cursor != null) {
    int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
    cursor.moveToFirst();
    picPath = cursor.getString(columnIndex);
    cursor.close();
    }
    Log.i(TAG, "imagePath = " + picPath);
    if (picPath != null
    && (picPath.endsWith(".png") || picPath.endsWith(".PNG")
    || picPath.endsWith(".jpg") || picPath.endsWith(".JPG"))) {
    lastIntent.putExtra(KEY_PHOTO_PATH, picPath);
    setResult(Activity.RESULT_OK, lastIntent);
    finish();
    } else {
    Toast.makeText(this, "选择图片文件不正确", Toast.LENGTH_LONG).show();
    }
    }
    }

    ============

    xml文件以及uploadUtil在demo里面,另外注意权限问题哈,

    完整代码见:

    csdn明天上传

     http://download.csdn.net/detail/onebelowzero2012/9379701

  • 相关阅读:
    双向绑定v-bind
    梁山好汉为何成不了大气候?(转)
    八大排序算法(转)
    在c或c+程序里打印调用栈。转
    cocos2dx 做test遇到一个问题,记录下来
    我所理解的cocos2dx自适配屏幕大小方案
    eclipse pydev 跳转
    mac 系统通用快捷键(mac 下的应用多数会往这些标准看齐)(转:http://yang3wei.github.io/blog/2013/02/08/chen-ni-yu-mac-chen-ni-yu-xcode/)
    使用cgitb来简化异常调试(记录下来,感觉很有用)
    python trackback的使用心得
  • 原文地址:https://www.cnblogs.com/yizuochengchi2012/p/5081322.html
Copyright © 2020-2023  润新知