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包
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android apk 项目一键打包并上传到蒲公英的实现方法
Android 自定义LineLayout实现满屏任意拖动功能的示例代码
android 限制某个操作每天只能操作指定的次数(示例代码详解)
Android 集成 google 登录并获取性别等隐私信息的实现代码
网友评论