当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现相册中图片上传或下载

Android实现相册中图片上传或下载

2019年07月23日  | 移动技术网IT编程  | 我要评论

4000元笔记本推荐,艘狗,园林绿化苗木报价

本文实例为大家分享了android实现相册中图片上传或下载的具体代码,供大家参考,具体内容如下

目标效果:

打开相册选择一张图片,会显示到上方的imageview中并存储到bmob中,存储后进入bmob后台,复制刚才添加的数据的objectid,粘贴到代码指定出,然后运行,点击下载会在下方的imageview显示刚才上传的图片,这里的下载是指定objectid,可以进行动态获取objectid进行下载。

1.activity_main.xml页面设置布局。

activity_main.xml页面:

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".mainactivity" >
 
 <imageview 
   android:id="@+id/ivhead"
   android:layout_margintop="20dp"
   android:layout_centerhorizontal="true"
   android:layout_width="150dp"
   android:layout_height="150dp"/>
 
 <button
   android:id="@+id/btnselectimage"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignparentleft="true"
   android:layout_below="@+id/ivhead"
   android:layout_margintop="16dp"
   android:text="打开相册" />
 
 <button
   android:id="@+id/btndownloadimage"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignparentleft="true"
   android:layout_below="@+id/btnselectimage"
   android:text="下载图片" />
 
 <imageview
   android:id="@+id/ivdownload"
   android:layout_width="150dp"
   android:layout_height="150dp"
   android:layout_margintop="20dp"
   android:layout_centerhorizontal="true"
   android:layout_below="@+id/btndownloadimage" />
 
</relativelayout>

2.mainactivity.java页面定义上传与下载方法。

mainactivity.java页面:

package com.example.text;
 
import java.io.file;
 
import cn.bmob.v3.bmob;
import cn.bmob.v3.bmobquery;
import cn.bmob.v3.datatype.bmobfile;
import cn.bmob.v3.listener.downloadfilelistener;
import cn.bmob.v3.listener.getlistener;
import cn.bmob.v3.listener.uploadbatchlistener;
import cn.bmob.v3.listener.uploadfilelistener;
 
import com.android.volley.toolbox.imageloader;
import com.example.text.mainactivity;
 
import entity.person;
 
import android.net.uri;
import android.os.bundle;
import android.os.environment;
import android.provider.mediastore;
import android.app.activity;
import android.content.intent;
import android.database.cursor;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.drawable.bitmapdrawable;
import android.graphics.drawable.drawable;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.imageview;
import android.widget.toast;
 
public class mainactivity extends activity implements onclicklistener {
 
 private imageview ivhead, ivdownload;
 private button btnselectimage, btndownloadimage;
 
 private static final int image_code = 0;// 打开相册
 private static final int resize_code = 2;// 调整大小
 
 private static final string image_name = " ";// 图片字符串
 
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 
 bmob.initialize(this, "8ef8a4752f48682eadb32d3c8c8e398f");// 初始化bmob
 
 // 初始化控件
 init();
 
 // 绑定点击事件
 bindclick();
 }
 
 // 初始化控件
 private void init() {
 ivhead = (imageview) findviewbyid(r.id.ivhead);
 ivdownload = (imageview) findviewbyid(r.id.ivdownload);
 btnselectimage = (button) findviewbyid(r.id.btnselectimage);
 btndownloadimage = (button) findviewbyid(r.id.btndownloadimage);
 }
 
 // 绑定点击事件
 private void bindclick() {
 btnselectimage.setonclicklistener(this);
 btndownloadimage.setonclicklistener(this);
 }
 
 @override
 public void onclick(view view) {
 switch (view.getid()) {
 case r.id.btnselectimage:
  intent galleryintent = new intent(intent.action_get_content);
  galleryintent.addcategory(intent.category_openable);
  galleryintent.settype("image/*");//图片
  startactivityforresult(galleryintent, image_code);  //跳转,传递打开相册请求码
  break;
 case r.id.btndownloadimage:
  bmobquery<person> query=new bmobquery<person>();
  query.getobject(this,"ef292ff6ef",new getlistener<person>() { //第二个参数为想要下载的bmobfile数据的objectid
  
  @override
  public void onsuccess(person person) {
   toast.maketext(mainactivity.this,"获取成功",toast.length_short).show();
   
   //下载图片
   downloadimage(person);
  }
  
  @override
  public void onfailure(int arg0, string arg1) {
   toast.maketext(mainactivity.this,"获取失败",toast.length_short).show();
  }
  });
  break;
 default:
  break;
 }
 
 }
 
 @override
 protected void onactivityresult(int requestcode, int resultcode, intent data) {
 if (resultcode != result_ok) {
  return;
 } else {
  switch (requestcode) {
  case image_code:
  uri uri = data.getdata();
  resizeimage(uri);
  // 将获取到的uri转换为string型
  string[] images = { mediastore.images.media.data };// 将图片uri转换成存储路径
  cursor cursor = this
   .managedquery(uri, images, null, null, null);
  int index = cursor
   .getcolumnindexorthrow(mediastore.images.media.data);
  cursor.movetofirst();
  string img_url = cursor.getstring(index);
  upload(img_url);
  break;
 
  case resize_code:
  if (data != null) {
   showresizeimage(data);
  }
  break;
  }
 }
 super.onactivityresult(requestcode, resultcode, data);
 }
 
 // 判断sd卡是否存在
 private boolean issdcardexisting() {
 final string state = environment.getexternalstoragestate();
 if (state.equals(environment.media_mounted)) {
  return true;
 } else {
  return false;
 }
 }
 
 // 重塑图片大小
 public void resizeimage(uri uri) {
 intent intent = new intent("com.android.camera.action.crop");
 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, resize_code);// 跳转,传递调整大小请求码
 }
 
 // 获取路径
 private uri getimageuri() {
 return uri.fromfile(new file(environment.getexternalstoragedirectory(),
  image_name));
 }
 
 // 显示图片
 private void showresizeimage(intent data) {
 bundle extras = data.getextras();
 if (extras != null) {
  bitmap photo = extras.getparcelable("data");
  drawable drawable = new bitmapdrawable(photo);
  ivhead.setimagedrawable(drawable);
 }
 }
 
 // 图片上传
 private void upload(string imgpath) {
 final bmobfile icon = new bmobfile(new file(imgpath));
 icon.upload(this, new uploadfilelistener() {
 
  @override
  public void onsuccess() {
  person person = new person();
  person.seticon(icon);
  person.save(mainactivity.this);
  toast.maketext(mainactivity.this,"图片上传成功",toast.length_short).show();
  }
 
  @override
  public void onfailure(int arg0, string arg1) {
  toast.maketext(mainactivity.this,"图片上传失败",toast.length_short).show();
  }
 });
 }
 
 //下载图片
 private void downloadimage(person person) {
 bmobfile icon=person.geticon();
 icon.download(mainactivity.this,new downloadfilelistener() {
  
  @override
  public void onsuccess(string url) {
  ivdownload.setimagebitmap(bitmapfactory.decodefile(url));  //根据地址解码并显示图片
  
  }
  
  @override
  public void onfailure(int arg0, string arg1) {
  toast.maketext(mainactivity.this,"下载失败",toast.length_short).show();
  }
 });
 
 }
}

3.person.java页面为实体类,运行自动生成一个person表,这个表只有一个字段存储图片。

person.java页面:

package entity;
 
import cn.bmob.v3.bmobobject;
import cn.bmob.v3.datatype.bmobfile;
 
public class person extends bmobobject{
 
 private bmobfile icon;
 
 public bmobfile geticon() {
 return icon;
 }
 
 public void seticon(bmobfile icon) {
 this.icon = icon;
 }
 
}

4.因为使用了bmob,所以需要添加权限。

androidmanifest.xml页面:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.text"
  android:versioncode="1"
  android:versionname="1.0" >
 
  <uses-sdk
    android:minsdkversion="8"
    android:targetsdkversion="18" />
  <uses-permission android:name="android.permission.write_contacts"/>
  <uses-permission android:name="android.permission.read_external_storage"/>
  <uses-permission android:name="android.permission.internet"/>
  
  <!-- 允许联网 -->
  <uses-permission android:name="android.permission.internet" />
  <!-- 获取gsm(2g)、wcdma(联通3g)等网络状态的信息 -->
  <uses-permission android:name="android.permission.access_network_state" />
  <!-- 获取wifi网络状态的信息 -->
  <uses-permission android:name="android.permission.access_wifi_state" />
  <!-- 保持cpu 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
  <uses-permission android:name="android.permission.wake_lock" />
  <!-- 获取sd卡写的权限,用于文件上传和下载 -->
  <uses-permission android:name="android.permission.write_external_storage" />
  <!-- 允许读取手机状态 用于创建bmobinstallation -->
  <uses-permission android:name="android.permission.read_phone_state" />
 
  <application
    android:allowbackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/apptheme" >
    <activity
      android:name="com.example.text.mainactivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.main" />
 
        <category android:name="android.intent.category.launcher" />
      </intent-filter>
    </activity>
  </application>
 
</manifest>

5.注意之前讲过使用bmob需要下载第三方sdk,将libs文件夹中的所有内容都复制到项目libs目录下,然后properties->java build path->libraries->add jars...添加刚复制的四个jar包

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网