您的位置:首页 > 其它

基于Bmob平台进行从服务器获取图片数据(url)的操作,并以瀑布流得形式显示图片

2016-09-16 20:38 323 查看
            最近一直在学习基于Bmob平台的数据交互,网上找了很多例子,但很多因为各种原因没有调试出来。后来转变学习思路,从获取数据开始学起,通过查阅文档,逛帖子找资料,学会了如何获取Bmob服务器端的图片数据,并通过获取其url来获取图片并以瀑布流得形式显示出来。参考的文章如http://www.cnblogs.com/jianrong-zheng/p/3449629.html,http://blog.csdn.net/hester_hester/article/details/51934143通过学习这两篇我感觉收获是最
大的,下面放效果图:



点击“图片“,会获取图片数据并显示:

 


       Bmob文档里有查询数据的案例,这里不仔细论述,直接借用代码格式。上面是效果图,先来看看Bmob平台的结构图:我在这里主要获取的是QiangYu表Contentfigureurl这一列数据,获取jpg格式图片,当然你有精力的话可以获取objectId列以及其他数据表的数据。


      Bmob开发文档有数据查询的具体案例,这里不做研究,这里直接借用代码格式:

BmobQuery<QiangYu> query1 = new BmobQuery<QiangYu>();
query1.findObjects(this, new FindListener<QiangYu>() {
@Override
public void onError(int code, String msg) {
// TODO Auto-generated method stub
Log.i("查询失败:",msg);
}
@Override
Log.i("查询成功:共",object.size()+"条数据。");
public void onSuccess(List<QiangYu> object) {
// TODO Auto-generated method stub
int j=object.size();
System.out.print(j+"\n");


       由于图片数据有很多条,我们主要获取的是图片所在的路径,即Bmob平台分配给图片的url,用代码格式:
String imgs = qiangyu.getContentfigureurl().getUrl();//获取图片url

后来获取的String数据格式如:M02/F9/0E/oYYBAFYV0dqAPYSUAABO6uI5wuY049.jpg,这不完整,我们需自己再添加:http://file.bmob.cn/,这样获取的url即为: http://file.bmob.cn/M02/F9/0E/oYYBAFYV0dqAPYSUAABO6uI5wuY049.jpg
       一开始我用的是String[]来集中获取的每一条地址,但感觉不是很好,后来用HashMap来获取,效率较高,但后面还要涉及二维数组转为一维数组来取得每一条url的问题。这里是map的应用代码:

ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
int i=0;
HashMap<String, Object> map = new HashMap<String, Object>();

for (QiangYu qiangyu:object) {

if(qiangyu.getContentfigureurl() != null){
//文件名称
//qiangyu.getContentfigureurl().getFilename();
//文件地址
String imgs = qiangyu.getContentfigureurl().getUrl();
map.put(""+i,"http://file.bmob.cn/"+qiangyu.getContentfigureurl().getUrl());

i++;
}//这里的i对后面维数转化有用


下图是获取的url组,用System.out.println();输出显示结果:


接下来是数组转化,这样方便瀑布流图片显示时获取每一条url:
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
String[][] ss = new String[map.size()][2];
for (i = 0; i < map.size(); i++) {
ss[i][0] = it.next();
ss[i][1] = (String) map.get(ss[i][0]);
System.out.print(ss[i][1]+"\n");
}
System.out.println(ss.length);
String [] urls = new String[(ss.length)*2];
for ( i = 0; i < ss.length; i++) {
for ( j = 0; j < ss[i].length; j++) {
urls[i+j] = ss[i][j+1];
System.out.println(urls[i+j]);
j++;
}
}


       参数传递给瀑布流显示所需要的Activity里的参数时,网上的方法很多,使用了多种,发现下面这个方法比较好(当然我的情况是这样):
       数据传输口                    //用Bundle携带数据  
Bundle bundle=new Bundle();
//传递name参数为urls
bundle.putStringArray("name", urls);
//String section =String.valueOf(data.toString());////get每一行的数据
Intent intent =new Intent(MainActivity.this,MainActivity1.class);
intent.putExtras(bundle);
startActivity(intent);


       数据接口代码:                                  
//新页面接收数据
Bundle bundle = this.getIntent().getExtras();
//接收name值
String[] urls= bundle.getStringArray("name");


    以上就是实现这个获取显示的功能的主要代码,大致过程就是这样,瀑布流的过程就不详细展开了,可以参考我看的那两篇文章,里面有具体代码,可以实现。
    贴上我的代码,时间比较久了,有问题可能要自己改:http://download.csdn.net/download/xuanwo11/9826241。
    后续有兴趣可以学习Bmob的一些案例。有问题可以私信,作者水平有限,纯属爱好,请见谅哦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐