React Native 之 通过AsyncStorage 实现数据持久化操作

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  AsyncStorage,
  Image,
  Text,
  TouchableHighlight,
  TextInput,
  StatusBar,
  View
} from 'react-native';

import AutoExpandingTextInput from './AutoExpandingTextInput';

import constantData from './data/SimpleSample.json';
let newJSONString = JSON.stringify(constantData);
let array = new Array;
export default class ViewProject extends Component {

   _doSomething(error){
      if(error!=null){
        console.log("--doSomething error messge:"+error.messge);
        return;
       }
      //执行成功的操作
       console.log("--doSomething-success----");
   }
    //这里 对数据的操作都分别用回调方法与 Promise机制后继处理的方法 来实现
    
    //1.写入数据
    
    //1.1 回调方法
    _setData(key,value){
      AsyncStorage.setItem(key,value,this._doSomething);
    }
    //1.2 通过Promise机制后继处理的方法
     _setDataPromise(key,value){
        AsyncStorage.setItem(key,value).then(
         ()=>{
          console.log("write one success");
          }
        ).catch(
        (error)=>{
          console.log("write one error");
        }
        );
    }
    //1.3 一次写入多组数据 回调方法
    _SetMultiData(array){
        AsyncStorage.multiSet(array,this._doSomething)
    }
    //1.4  一次写入多组数据 Promise机制后继处理的方法
    _setMultiDataPromise(array){
      AsyncStorage.multiSet(array).then(
        ()=>{
          console.log(">>write multi success"); //保存成功的操作
         }
        ).catch(
         (error)=>{
          console.log(">>write multi error:"+error.message);   //保存失败的操作
         }
        );
    }

   
    //2. 读取数据

   //2.1 回调方法方式读取
    _getData(key){
       AsyncStorage.getItem(key,this._handleResult);
    }
    
    
    _handleResult(error,result){
      if(error!=null){
        console.log("error message:"+error.message);
        //读取失败的操作
        return;
      }
      if(result===null){
        console.log("--null--"); // 存储中没有指定键对应的值,处理这种情况
        return;
      }
      console.log("--reade success -result--"+result);
    }
   
    
   _handleAllKeys(error,keys){
     if(error != null){
      console.log("dataLoaded error:"+error.message);
      return;
     }else{
      console.log("get all key error is null");
      let allKeyLen = keys.length;
      for (let counter=0; counter<allKeyLen;counter++) {
          console.log("key"+counter+":"+keys[counter]);
            AsyncStorage.getItem(keys[counter]).then(
             (result)=>{
              console.log("key"+keys[counter]+" getItem data:"+result);
             }
           ).catch(
              (error)=>{
              console.log("error message:"+error.message);
               //读取失败的操作
               return;
              }
            );
      }
     }

   }

 
    //2.2 Promise机制后继处理的方法
    _getDataPromise(key){
      AsyncStorage.getItem(key).then(
        (result)=>{
          if(result===null){
           console.log("--null--"); // 存储中没有指定键对应的值,处理这种情况
           return;
          }else if(result!=null){
            console.log("--success--result="+result);//读取成功的操作
          }

        }

        ).catch(
           (error)=>{
            console.log("---reade error:"+error.message);
           }
        );
    }
    
    //获取所有数据 回调方法
    _getAllKeys(){
      AsyncStorage.getAllKeys(this._handleAllKeys);
    }
    //获取所有数据  Promise机制后继处理的方法
    _getAllKeysPromise(){
      AsyncStorage.getAllKeys().then(
       (keys)=>{
         let allKeyLen = keys.length;
         for (let counter=0; counter<allKeyLen;counter++) {
          console.log(">>key"+counter+":"+keys[counter]);
            AsyncStorage.getItem(keys[counter]).then(
             (result)=>{
              console.log(">>key"+keys[counter]+" getItem data:"+result);
             }
           ).catch(
              (error)=>{
              console.log("error message:"+error.message);
               //读取失败的操作
               return;
              }
            );
          }
       }
      ).catch(
         (error)=>{
          console.log("error message:"+error.message);
          //读取失败的操作
          return;
          }
      );
    }

   //3 删除数据
   //3.1 删除单个数据 回调方法
    _delete(key){
      AsyncStorage.removeItem(key,this._doSomething);
    }
   //3.2 删除单个数据 Promise 机制后继处理方式
    _deletePromise(key){
      AsyncStorage.removeItem(key).then(
        ()=>{
          //删除成功后的操作
          console.log("success delete");
        }
      ).catch(
        (error)=>{
          //处理异常操作
          console.log("error:"+error.message);
        }
      );
    }

   //3.3 回调方式删除多个数据
     _multiRemove(array){
       AsyncStorage.multiRemove(array,this._doSomething);
     }
   //3.4 删除多个数据 Promise 机制后继处理方式
     _multiRemovePromise(array){
       AsyncStorage.multiRemove(array).then(
         //操作成功处理
         ()=>{
           console.log("--删除成功--");
         }
       ).catch(
         (error)=>{
           console.log("--删除失败--");
         }
       );
     }
    //3.5 删除所有数据 回调方式
     _clear(){
       AsyncStorage.clear(this._doSomething);
     }
    //3.6 删除所有数据  Promise 机制后继处理方式
     _clearPromise(){
       AsyncStorage.clear().then(
        ()=>{
          //删除成功的操作
          console.log("--删除成功--");
        }
       ).catch(
         (error)=>{
           console.log("--删除失败--error:"+error.message);
         }
       );
     }

   //4. JSON 数据的保存于读取
   
   //4.1 回调方式保存json格式数据
    _saveJSON(key,jsonString){
       AsyncStorage.setItem(key,jsonString,this._doSomething);
     }
   //4.2 保存json格式数据 Promise 机制后继处理方式
    _saveJSONPromise(key,jsonString){
      AsyncStorage.setItem(key,jsonString).then(
        ()=>{
          console.log("write json success");
          } 
      ).catch(
          (error)=>{
          console.log("write json error:"+error.message);
          }
      );
    }
   //4.3 回调方式 读取json数据 
    _getJSON(key){
       AsyncStorage.getItem(key,this._handleResultJSON);
    }
    //4.3 读取json数据 Promise 机制后继处理方式
    _getJSONPromise(key){
      AsyncStorage.getItem(key).then(
         (result)=>{
          if(result===null){
           console.log("-json data-null--"); // 存储中没有指定键对应的值,处理这种情况
           return;
          }else if(result!=null){
           console.log("-json-success-result="+result);//读取成功的操作
          }

        }
      ).catch(
         (error)=>{
           console.log("---error="+e.message);//读取成功的操作
         }
      );
    }

    _handleResultJSON(error,result){
       if(error!=null){
        console.log("json error message:"+error.message);
        //读取失败的操作
        return;
      }
      if(result===null){
        console.log("-json-null--"); // 存储中没有指定键对应的值,处理这种情况
        return;
      }

      // let anotherData = JSON.parse(result);  //将字符串转换为JSON对象
      console.log("--reade json success -result--"+ result);
    }
  
   _onChangeText(newText) {
        console.log('inputed text:' + newText);
        // this._setData("1","ni hao");
        // this._setDataPromise("2","ni bu hao");
        // this._SetMultiData([["3","003"],["4","004"]]);
        // this._setMultiDataPromise([["5","005"],["6","006"]]);

        // this._getData("1");
        // this._getDataPromise("2");
        // this._getAllKeys();
        // this._getAllKeysPromise();

        // this._delete("1");
        // this._deletePromise("2");
        // this._multiRemovePromise(["3","4"]);
        // this._multiRemove(["5","6"]);
        // this._clear();
        // this._clearPromise();

        // this._saveJSONPromise("json",newJSONString);
        // this._getJSONPromise("json");

        // this._saveJSON("json1",newJSONString);
        // this._getJSON("json1");
        
        // this._getAllKeysPromise();
    }

  render() {
    return (
      <View style={styles.container}>
        <AutoExpandingTextInput 
          onChangeText={(newText)=>{this._onChangeText(newText)}}
        />
      </View>
    );
  }


}



const styles = StyleSheet.create({
  container: {
    flex:1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor:'#F5FCFF'
  }
});
AppRegistry.registerComponent('ViewProject', () => ViewProject);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值