Bmob:后端云 全方位一体化的后端服务平台,无需再造应用后端服务 轻松拥有开发中需要的各种后端能力。

ECharts:开源图表库,丰富的可视化效果,多图表类型,满足不同数据的处理需求 更多的搭配方案让你的数据呈现方式更个性和完美。

1,Android Bmob使用

1)在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址,

allprojects {

repositories {

jcenter()

//Bmob的maven仓库地址--必填

maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }

}

}

2)在app的build.gradle文件中添加compile依赖文件,

//如果你想应用能够兼容Android6.0,请添加此依赖(org.apache.http.legacy.jar)

compile 'cn.bmob.android:http-legacy:1.0'

3)Bmob初始化,

//默认初始化

Bmob.initialize(this, "Your Application ID");

// 注:自v3.5.2开始,数据sdk内部缝合了统计sdk,开发者无需额外集成,传渠道参数即可,不传默认没开启数据统计功能

//Bmob.initialize(this, "Your Application ID","bmob");

4)Bmob使用。

首先建立数据对象AddressIofo,

package com.demo.xiep.mode;

import cn.bmob.v3.BmobObject;

/**

* 作者:xiep on 2017/5/22 10:38

*/

public class AddressIofo extends BmobObject {

/** 国家 */

private String country;

private String country_id;

/** 地区 */

private String area;

private String area_id;

/** 省 */

private String region;

private String region_id;

/** 市 */

private String city;

private String city_id;

/** 县 */

private String county;

private String county_id;

public String getCountry() {

return country;

}

public void setCountry(String country) {

this.country = country;

}

public String getCountry_id() {

return country_id;

}

public void setCountry_id(String country_id) {

this.country_id = country_id;

}

public String getArea() {

return area;

}

public void setArea(String area) {

this.area = area;

}

public String getArea_id() {

return area_id;

}

public void setArea_id(String area_id) {

this.area_id = area_id;

}

public String getRegion() {

return region;

}

public void setRegion(String region) {

this.region = region;

}

public String getRegion_id() {

return region_id;

}

public void setRegion_id(String region_id) {

this.region_id = region_id;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getCity_id() {

return city_id;

}

public void setCity_id(String city_id) {

this.city_id = city_id;

}

public String getCounty() {

return county;

}

public void setCounty(String county) {

this.county = county;

}

public String getCounty_id() {

return county_id;

}

public void setCounty_id(String county_id) {

this.county_id = county_id;

}

}

通过BmobObject进行数据操作。

package com.demo.xiep;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

import com.demo.xiep.mode.AddressIofo;

import java.util.ArrayList;

import java.util.List;

import cn.bmob.v3.Bmob;

import cn.bmob.v3.BmobBatch;

import cn.bmob.v3.BmobObject;

import cn.bmob.v3.BmobQuery;

import cn.bmob.v3.datatype.BatchResult;

import cn.bmob.v3.exception.BmobException;

import cn.bmob.v3.listener.FindListener;

import cn.bmob.v3.listener.QueryListListener;

import cn.bmob.v3.listener.UpdateListener;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//第一:默认初始化

Bmob.initialize(this, "App ID");

Button AddData = (Button) findViewById(R.id.add_data);

Button QueryData = (Button) findViewById(R.id.query_data);

Button ModifyData = (Button) findViewById(R.id.modify_data);

Button DeleteData = (Button) findViewById(R.id.delete_data);

AddData.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

addData();

}

});

QueryData.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

queryData();

}

});

ModifyData.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

modifyData();

}

});

DeleteData.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

deleteData();

}

});

}

private void addData() {

List addressIofos = new ArrayList();

for (int i = 0; i < 10; i++) {

AddressIofo addressIofo = new AddressIofo();

addressIofo.setCountry("中国");

addressIofo.setRegion("广东");

addressIofo.setCity("深圳");

addressIofos.add(addressIofo);

}

for (int i = 0; i < 5; i++) {

AddressIofo addressIofo = new AddressIofo();

addressIofo.setCountry("中国");

addressIofo.setRegion("广东");

addressIofo.setCity("广州");

addressIofos.add(addressIofo);

}

for (int i = 0; i < 5; i++) {

AddressIofo addressIofo = new AddressIofo();

addressIofo.setCountry("中国");

addressIofo.setRegion("湖南");

addressIofo.setCity("长沙");

addressIofos.add(addressIofo);

}

new BmobBatch().insertBatch(addressIofos).doBatch(new QueryListListener() {

@Override

public void done(List o, BmobException e) {

if (e == null) {

for (int i = 0; i < o.size(); i++) {

BatchResult result = o.get(i);

BmobException ex = result.getError();

if (ex == null) {

Log.i("bmob", "第" + i + "个数据批量添加成功:" + result.getCreatedAt() + "," + result.getObjectId() + "," + result.getUpdatedAt());

} else {

Log.i("bmob", "第" + i + "个数据批量添加失败:" + ex.getMessage() + "," + ex.getErrorCode());

}

}

} else {

Log.i("bmob", "失败:" + e.getMessage() + "," + e.getErrorCode());

}

}

});

}

private void queryData() {

BmobQuery query = new BmobQuery();

//查询playerName叫“比目”的数据

query.addWhereEqualTo("country", "中国");

query.order("-createdAt");// 按照时间降序

//返回50条数据,如果不加上这条语句,默认返回10条数据

query.setLimit(100);

//执行查询方法

query.findObjects(new FindListener() {

@Override

public void done(List object, BmobException e) {

if (e == null) {

toast("查询成功:共" + object.size() + "条数据。");

for (AddressIofo addressIofo : object) {

//获得playerName的信息

addressIofo.getCountry();

//获得数据的objectId信息

addressIofo.getRegion();

//获得createdAt数据创建时间(注意是:createdAt,不是createAt)

addressIofo.getCreatedAt();

Log.i("bmob", "成功:" + addressIofo.getCountry() + "," + addressIofo.getRegion() + "," + addressIofo.getCity() + "," + addressIofo.getCreatedAt());

}

} else {

Log.i("bmob", "失败:" + e.getMessage() + "," + e.getErrorCode());

}

}

});

}

private void modifyData() {

//更新Person表里面id为6b6c11c537的数据,address内容更新为“北京朝阳”

final AddressIofo p2 = new AddressIofo();

p2.setCity("常德");

p2.update("1ec0b8868d", new UpdateListener() {

@Override

public void done(BmobException e) {

if (e == null) {

toast("更新成功:" + p2.getUpdatedAt());

} else {

toast("更新失败:" + e.getMessage());

}

}

});

}

private void deleteData() {

final AddressIofo p2 = new AddressIofo();

p2.setObjectId("4baf4e4f1b");

p2.delete(new UpdateListener() {

@Override

public void done(BmobException e) {

if (e == null) {

toast("删除成功:" + p2.getUpdatedAt());

} else {

toast("删除失败:" + e.getMessage());

}

}

});

}

private void toast(String s) {

Toast.makeText(this, s, Toast.LENGTH_SHORT).show();

}

}

数据操作结果:

Address数据库后台.png

2,JavaScript Bmob使用

1)安装BmobSDK

把下面这行代码加入你的页面中,其中,"bmob-min.js"为SDK文件:

2)接着是加入下面这行代码进行初始化

Bmob.initialize("你的Application ID", "你的REST API Key");

3,Echarts 图表使用

1)引入 ECharts

2)创建echarts实例

// 基于准备好的dom,初始化echarts实例

var myChart = echarts.init(document.getElementById('main'));

// 指定图表的配置项和数据

var option = {

···

};

// 使用刚指定的配置项和数据显示图表。

myChart.setOption(option);

完整示例:

Demo

Bmob.initialize("你的Application ID", "你的REST API Key");

var DeviceData = Bmob.Object.extend("DeviceData");

var query = new Bmob.Query(DeviceData);

// 查询所有数据

query.find({

success: function(results){

// 基于准备好的dom,初始化echarts实例

var myChart = echarts.init(document.getElementById('main'));

myChart.hideLoading();

myChart.setOption(option = {

title: {

text: '设备信息',

subtext: '纯属虚构',

left: 'center'

},

tooltip: {

trigger: 'item'

},

legend: {

orient: 'vertical',

left: 'left',

data:['device']

},

visualMap: {

min: 0,

max: 2500,

left: 'left',

top: 'bottom',

text: ['高','低'], // 文本,默认为数值文本

calculable: true

},

toolbox: {

show: true,

orient: 'vertical',

left: 'right',

top: 'center',

feature: {

dataView: {readOnly: false},

restore: {},

saveAsImage: {}

}

},

series: [

{

name: 'device',

type: 'map',

mapType: 'china',

roam: false,

label: {

normal: {

show: true

},

emphasis: {

show: true

}

},

data: convertData(results)

}

]

});

// 使用刚指定的配置项和数据显示图表。

myChart.setOption(option);

// alert("共查询到 " + results.length + " 条记录");

},

error: function(error) {

alert("查询失败: " + error.code + " " + error.message);

}

});

function convertData(results) {

// console.log("共查询到 results " + results);

var res = [];

for (var i = 0; i < results.length; i++) {

var object = results[i];

res.push({

name: object.get('name'),

value: object.get('value')

});

// alert(object.id + ' - ' + object.get('name'));

console.log("results[i].name " + object.get('name') + ' - ' + object.get('value'));

}

// console.log("共查询到 res " + res);

return res;

};

示例图表生成效果:

设备信息地图1.png

设备信息地图2.png

如需要使用世界地图只需引入世界地图资源:

使用ECharts生成其他图表示例:

饼图.png

雷达图.png

android bmob上传图片,Bmob+Android+ECharts 实现移动端数据上传与图表展示相关推荐

  1. 为什么手机上传图片这么慢 前端_移动端图片上传旋转、压缩的解决方案

    前言 在手机上通过网页 input 标签拍照上传图片,有一些手机会出现图片旋转了90度d的问题,包括 iPhone 和个别三星手机.这些手机竖着拍的时候才会出现这种问题,横拍出来的照片就正常显示.因此 ...

  2. 新大陆物联网-Android实现网关功能-连接云平台并上传传感器数据-获取执行器指令并执行-Android网关开发-通信-数据上传云平台-JAVA原理讲解-免费云平台使用-竞赛2022国赛真题

    目录 一.任务要求 二.开发环境 三.网关上线 四.数据上传与命令下发 五.JSON命令解析思路 六.总结 一.任务要求 我们将要实现的效果是:Android开发平板与Lora板进行有线串口通信,解析 ...

  3. 调用android的拍照或本地相册选取再实现相片上传服务器,Android调用系统相机、本地相册上传图片(头像上传(裁剪)、多张图片上传)...

    开发中基本上都会有头像上传的功能,有的app还需要多张图片同时上传,下面简单将头像上传以及多张图片上传功能整理一下.图片选择仿照微信选择图片的界面.[参考] 多图片选择器 !!!推荐一个动态权限请求的 ...

  4. Android模拟器中sd卡的创建和文件的上传

    在使用android 模拟器的sd卡上传文件的时候出现过如下的错误: ailed to push selection: Invalidargument Failed to push the item( ...

  5. android post数据到php服务器,通过post方法将数据上传到服务器Android Studio

    我正试图通过android studio中的POST请求上传一张图片到服务器上,但我完全被困住了. 控制台没有给我任何信息,可以指出出了什么问题,当我单击上传,它只是不工作. 我在postexecut ...

  6. Android图文混排-实现EditText图文混合插入上传

    前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图: 在上图的"会议详情"中,需要支持文本和图片的混合插入,下图演示输入的示例: 当会议创建 ...

  7. android仿支付宝头像裁剪,易用的头像裁剪上传、头像美化组件

    更新记录 3.4.2(2020-06-30) 参数优化 3.3.4(2020-06-24) 支付宝平台必须填写noTab参数 查看更多 十分抱歉,因为精力有限,本插件暂停维护 注意: 1) H5平台, ...

  8. android 文件上传工具类,Android快速开发架构PlanA(五),文件上传下载了解一下...

    1.PlanA文件上传&下载的使用 PlanA架构集成第五篇,文件上传下载的使用,文件上传&下载在APP里面随处可见,发朋友圈要上传图片或者短视频,换个头像要上传选择的图片,offic ...

  9. okhttp上传图片和其他参数_Android中Okhttp3实现上传多张图片同时传递参数_放手_前端开发者...

    之前上传图片都是直接将图片转化为io流传给服务器,没有用框架传图片. 最近做项目,打算换个方法上传图片. Android发展到现在,Okhttp显得越来越重要,所以,这次我选择用Okhttp上传图片. ...

最新文章

  1. 又一款4800像素手机曝光:vivo V15 Pro
  2. linux centos7 开机自动登录
  3. POJ1787多重背包中在最优方案下输出具体的选择方案
  4. 话里话外:成功的ERP需要全程的流程变革(三)
  5. 大势所趋与各具特色 超融合市场玩家大盘点
  6. 中考计算机考试试题山西注意事项,2021年山西省中考考试注意事项(3)
  7. 深度学习之RNN、LSTM、GRU篇
  8. 知识图谱组队学习Task03——图数据库导入数据
  9. linux 输入法框架xim,基于XIM协议的输入法原理与实现
  10. 如何实现一个无边框Form的移动和改变大小(一)
  11. 学python前端需要哪些基础知识_前端基础知识整理回顾~~
  12. z变换解差分方程例题_Z变换及差分方程求解.doc
  13. 语料库与计算机辅助翻译,漫谈机器翻译与计算机辅助翻译.doc
  14. ICPC焦作站(E、F)+思维+树上dp
  15. CRC16-ccitt-false 递归解析每一个号码段的值
  16. NVM安装nodejs的方法
  17. linux ps2键盘驱动,Linux下USB模拟ps2鼠标驱动
  18. Vertx中的verticle详解
  19. TVS 管 和TSS管
  20. unity, Graphics.Blit (null, null, mat,0);

热门文章

  1. PyTorch学习率 warmup + 余弦退火
  2. 测试相机的软件叫什么,测年龄的app叫什么(测年龄的相机软件app)
  3. APP兼容性测试---testin云测试平台
  4. 计算机休眠唤醒后 网络受限,Win7系统待机/休眠被唤醒后笔记本WIFI无线网络无法连接解决方法...
  5. 04 ElasticSearch分词及高阶搜索
  6. PE文件学习系列二 DOS头分析
  7. DOSBOX——DEBUG的简单使用
  8. Python网络爬虫实例(爬一些小网站的图片)
  9. 人工智能会代替人工翻译?知行翻译:这是不可能地!
  10. 【前端17_JS】ES 6:Let 、Const、对象冻结、解构赋值、暂时性死区 TDZ、惰性求值、模板字符串