详解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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • 详解Android数据存储之Android 6.0运行时权限下文件存储的思考

    前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi

  • Android基础教程数据存储之文件存储

    Android基础教程数据存储之文件存储 将数据存储到文件中并读取数据 1.新建FilePersistenceTest项目,并修改activity_main.xml中的代码,如下:(只加入了EditText,用于输入文本内容,不管输入什么按下back键就丢失,我们要做的是数据被回收之前,将它存储在文件中) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="

  • Android通过"记住密码"功能学习数据存储类SharedPreferences详解及实例

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中. 一.简介 它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容. 二.重要方法 public abstract boole

  • Android四种数据存储的应用方式

    Android四种数据存储的应用方式 作为一个完整的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.文件存储.SQLite. Content Provider.对这几种方式的不同和应用场景整理如下. 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解

  • 5种Android数据存储方式汇总

    本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比

  • Android SQLite数据库彻底掌握数据存储

    SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么. 例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值. 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误. 另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句

  • Android平台中实现数据存储的5种方式

    本文介绍Android中的5种数据存储方式,具体内容如下 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍.  第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一

  • 详解Android数据存储—使用SQLite数据库

    SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库.Android提供了3种操作数据的方式,SharedPreference(共享首选项).文件存储以及SQLite数据库. SQLite数据库文件被保存在/data/data/package_name/databases目录下. 一.创建和删除表 1.创建表 创建表的SQL语句为: CREATE TABLE userInfo_brief ( id INTEGER PRIMARY KEY AUTOINCREMENT, na

  • 详解Android的网络数据存储

    一.网络保存数据介绍 可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中. 用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法. 本文利用LeanCloud来进行网络数据的存储. LeanCloud是一种简单高效的数据和文件存储服务.感兴趣的可以查看网址:https://leancloud.cn/.关于LeanCloud的数据存储使用方法可以在里面找到,本文不讲述关于LeanCloud的使用,知识借助LeanCloud平台举一个在网络上存储数据的例子.

  • 详解Android 中的文件存储

    目录 概要 当我们查看手机的文件管理器的时候,会发现里面的文件五花八门,想要找到自己项目所对应的文件非常困难,甚至有可能压根就找不到自己的文件,本文就来介绍一下APP开发过程当中文件存储的注意事项. 通常我们会将存放的文件分为两种:独立文件和专属文件.顾名思义,独立文件就是独立于APP之外的文件,不会随着APP的删除而删除,而专属文件则是专属于某个APP的文件,当APP删除后,会自动清空相对应的专属文件. 独立文件 独立文件指的是存放在shared/external storage direct

  • 实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍Android文件存储数据方式. 1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法. 创建的存储文件保存在/data/data/<package name>/files文件夹下. 2.操作. 保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式. 读取文件内容:通

  • 详解Android 基于TCP和UDP协议的Socket通信

    本来想讲一下基础的网络通信方面的知识点,发现太枯燥乏味了,不过笔试中也经常会问到这方面的问题,所以关于通信方面的知识点,小编会放到面试中去,因为实战中也就面试会用到这方面知识点 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据. 而Socket通信中基于TCP/IP协议的通信则是在双方建立起连接后就可以直接进行数

  • 详解Android系统启动过程

    计算机是如何启动的 计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等输入输出设备.所有的软件都是存放在硬盘中,程序执行时,需要将程序从硬盘上读取到内存中,然后加载到CPU中来运行.当按下开机键时,内存中什么都没有,因此需要借助某种方式,将操作系统加载到内存中,而完成这项任务的就是BIOS. 引导阶段 BIOS:BIOS是主板芯片上的一个程序,计算机通电后,第一件事情就是读取BIOS. BIOS首先进行硬件检测,检查计算机硬件能否满足运行的基本条件.如果硬件出现问题,主板发出不同的蜂

  • 详解Android ContentProvider的基本原理和使用

    一.前言 Android 的数据存储方式总共有五种,分别是:Shared Preferences.网络存储.文件存储.外储存储.SQLite.但一般这些存储都只是在单独的一个应用程序之中达到一个数据的共享,有时候我们需要操作其他应用程序的一些数据,就会用到 ContentProvider.而且 Android 为常见的一些数据提供了默认的 ContentProvider(包括音频.视频.图片和通讯录等). 要实现与其他的 ContentProvider 通信首先要查找到对应的 ContentPr

  • 详解Android中图片的三级缓存及实例

    详解Android中图片的三级缓存及实例 为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量.在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响 特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知 所以提出三级缓存策略,通过网络.本地.内存三级缓存图片,来减少不必要的网络交互,避免浪费流量

  • 详解Android 中AsyncTask 的使用

    详解Android 中AsyncTask 的使用 1.首先我们来看看AsyncTask 的介绍:   Handler 和 AsyncTask 都是android 中用来实现异步任务处理的方式:其中: Handler 实例向 UI 线程发送消息,完成界面更新, 优点:对整个过程控制的比较精细:         缺点:代码相对臃肿,多个任务同时执行时,不易对线程进行精确的控制: AsyncTask :比Handler 更轻量级一些,适用于简单的异步处理: 优点:简单 | 快捷 | 过程可控:    

  • 详解Android 消息处理机制

    摘要 Android应用程序是通过消息来驱动的,当Android主线程启动时就会在内部创建一个消息队列.然后进入一个无限循环中,轮询是否有新的消息需要处理.如果有新消息就处理新消息.如果没有消息,就进入阻塞状态,直到消息循环被唤醒. 那么在Android系统中,消息处理机制是怎么实现的呢?在程序开发时,我们经常会使用Handler处理Message(消息).所以可以知道Handler是个消息处理者,Message是消息主体.除此之外还有消息队列和消息轮询两个角色.它们分别是MessageQueu

  • 详解Android JetPack之LiveData的工作原理

    前言 本篇文章主要讲解LiveData工作的原理,如果还不知道LiveData如何用的话,请参考官方文档. LiveData的讲解涉及到了Lifecycle的知识,如果你还不了解LifeCycle,请参考文档LifeCycle介绍. 介绍 LiveData是一个数据持有类,它可以通过添加观察者被其他组件观察其变更.不同于普通的观察者,它最重要的特性就是遵从应用程序的生命周期,如在Activity中如果数据更新了但Activity已经是destroy状态,LivaeData就不会通知Activit

随机推荐