详解Android的网络数据存储
作者:潘侯爷 发布时间:2022-08-22 01:39:39
标签:Android,数据存储
一、网络保存数据介绍
可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中。
用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法。
本文利用LeanCloud来进行网络数据的存储。
LeanCloud是一种简单高效的数据和文件存储服务。感兴趣的可以查看网址:https://leancloud.cn/。关于LeanCloud的数据存储使用方法可以在里面找到,本文不讲述关于LeanCloud的使用,知识借助LeanCloud平台举一个在网络上存储数据的例子。
二、使用方法
1.上传数据
AVObject personObject = new AVObject(TABLENAME);
personObject.put(NAME, person.name);
personObject.put(AGE, person.age);
personObject.put(INFO, person.info);
personObject.saveInBackground(new SaveCallback() {
@Override
public void done(AVException e) {
if (e == null) {
Log.v(TAG, "put data success!");
} else {
Log.v(TAG, "put data failed!error:" + e.getMessage());
}
}
});
2. 读取数据
AVQuery<AVObject> avQuery = new AVQuery<>(TABLENAME);
avQuery.findInBackground(new FindCallback<AVObject>() {
@Override
public void done(List<AVObject> list, AVException e) {
if (e == null) {
Log.v(TAG, "get data success!");
String message = "";
for (int i = 0; i < list.size(); i++) {
String name = list.get(i).getString(NAME);
int age = list.get(i).getInt(AGE);
String info = list.get(i).getString(INFO);
message += "name:" + name + ",age:" + age + ",info:" + info + ".\n";
}
textView.setText(message);
}
}
});
三、小案例
1.添加strings.xml文件
<string name="network">Network</string>
<string name="get_data">获取数据</string>
<string name="put_data">上传数据</string>
2.修改activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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"
android:fitsSystemWindows="true"
tools:context="com.zhangmiao.datastoragedemo.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/network" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/fab_margin"
android:layout_marginTop="@dimen/fab_margin"
android:orientation="horizontal">
<Button
android:id="@+id/network_put"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/put_data" />
<Button
android:id="@+id/network_get"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/get_data" />
</LinearLayout>
<TextView
android:id="@+id/table_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
3.添加NetworkDBManager类
package com.zhangmiao.datastoragedemo;
import android.util.Log;
import android.widget.TextView;
import com.avos.avoscloud.AVException;
import com.avos.avoscloud.AVObject;
import com.avos.avoscloud.AVQuery;
import com.avos.avoscloud.FindCallback;
import com.avos.avoscloud.SaveCallback;
import java.util.List;
/**
* Created by zhangmiao on 2016/12/22.
*/
public class NetworkDBManager {
private static final String TAG = "NetworkDBManager";
private final static String TABLENAME = "person";
private final static String NAME = "name";
private final static String AGE = "age";
private final static String INFO = "info";
public void putData(Person person) {
AVObject personObject = new AVObject(TABLENAME);
personObject.put(NAME, person.name);
personObject.put(AGE, person.age);
personObject.put(INFO, person.info);
personObject.saveInBackground(new SaveCallback() {
@Override
public void done(AVException e) {
if (e == null) {
Log.v(TAG, "put data success!");
} else {
Log.v(TAG, "put data failed!error:" + e.getMessage());
}
}
});
}
public void getData(final TextView textView) {
AVQuery<AVObject> avQuery = new AVQuery<>(TABLENAME);
avQuery.findInBackground(new FindCallback<AVObject>() {
@Override
public void done(List<AVObject> list, AVException e) {
if (e == null) {
Log.v(TAG, "get data success!");
String message = "";
for (int i = 0; i < list.size(); i++) {
String name = list.get(i).getString(NAME);
int age = list.get(i).getInt(AGE);
String info = list.get(i).getString(INFO);
message += "name:" + name + ",age:" + age + ",info:" + info + ".\n";
}
textView.setText(message);
}
}
});
}
}
4.修改AndroidManifest.xml文件
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
5.修改MainActivity
package com.zhangmiao.datastoragedemo;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.*;
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.TextView;
import com.avos.avoscloud.AVOSCloud;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private NetworkDBManager mNetworkDBManager;
private TextView mTableInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.v("MainActivity", "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AVOSCloud.initialize(this, "yMNUazdBt872mNtC9aSakjYy-gzGzoHsz", "d4vw3VYdMCjLpsXRhHTBRutC");
mNetworkDBManager = new NetworkDBManager();
Button networkGet = (Button) findViewById(R.id.network_get);
Button networkPut = (Button) findViewById(R.id.network_put);
mTableInfo = (TextView) findViewById(R.id.table_info);
networkGet.setOnClickListener(this);
networkPut.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {case R.id.network_put:
Person person3 = new Person("xiao", 23, "women");
Person person4 = new Person("zhao", 24, "men");
mNetworkDBManager.putData(person3);
mNetworkDBManager.putData(person4);
break;
case R.id.network_get:
mNetworkDBManager.getData(mTableInfo);
break;
default:
Log.v("MainActivity", "default");
break;
}
}
}
下载地址:http://xiazai.jb51.net/201612/yuanma/DataStorageDemo-master_jb51.rar
来源:http://www.cnblogs.com/zhangmiao14/p/6213740.html
0
投稿
猜你喜欢
- 本文实例为大家分享了java实现简单的猜数字的具体代码,供大家参考,具体内容如下题目描述:猜数字(又称 Bulls and Cows )是一
- 前言在上一篇文章中讲完了SpringMVC的大部分知识,此篇文章中主要讲解 * 。上一篇文章🚩 * 的使用是非常普遍的。例如在 OA系统中通
- 环境信息名称版本号Spring Boot2.4.5Idea2021.3.2服务端实现导入依赖<dependency>  
- public class Wrapper { public static void main
- 目录前言正文自定义NameSpaceHandler自定义schemaParserDecorator总结前言在早期基于Xml配置的Spring
- 注意:不同的JDK版本的扩容机制可能有差异实验环境:JDK1.8扩容机制:当向ArrayList中添加元素的时候,ArrayList如果要满
- 本文实例为大家分享了java实现斗地主发牌的具体代码,供大家参考,具体内容如下参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,
- 概述从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章.贪心算法贪心算法 (Greedy Algorithm)
- Java获取环境变量Java 获取环境变量的方式很简单: System.getEnv() 得到所有的环境变量Syste
- 前言自从用了SpringBoot,个人最喜欢的就是SpringBoot的配置文件了,和Spring比起SpringBoot更加灵活,修改的某
- DAO模式是接口的一个典型应用。1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同
- 一、maven * 搭建使用Nexus进行搭建,网上教程很多,不多赘述了。二、gradle配置在build.gradle文件的根节点中添加以下
- ForkJoinTask就是ForkJoinPool里面的每一个任务。他主要有两个子类:RecursiveAction和RecursiveT
- 使用Eureka实现服务治理作用:实现服务治理(服务注册与发现)简介:Spring Cloud Eureka是Spring Cloud Ne
- 在项目中,需要使用XStream将xml string转成相应的对象,却报出了java.lang.ClassCastException: c
- 当我们在项目中登录使用验证码的时候,不妨试试Kaptcha生成验证码,非常简单1、首先,我们在pom.xml文件中引入kaptcha的mav
- 在使用他人代码时,为不保留文件头部版权信息,需要一个个删掉,费时费力,写了个脚本,简单清除掉目录下所有的文件的头部版权信息。# -*- co
- 前言Spring Boot 中提供一个全局的配置文件:application.properties,这个配置文件的作用就是,允许我们通过这个
- 简单回顾一下CAS算法CAS算法 即compare and swap(比较与交换),是一种有名的无锁算法。无锁编程,即不使用锁的情况下实现多
- 简介我们在使用flutter的过程中,有时候需要控制某些组件是否展示,一种方法是将这个组件从render tree中删除,这样这个组件就相当