2017-05-29 30 views
0

AsyncStorageはデータの上書きまたは削除を許可していません。AsyncStorageが正常に動作しません。androidに反応しません。

これは私が保存してAsyncStorageから取得したい場所を以下の機能があり、私のデータ

const allData = [ 
    { 
    txnId: '012', 
    category: '', 
    time: 'Today, 2:00pm', 
    amount: 129, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '011', 
    category: '', 
    time: 'Today, 1:00pm', 
    amount: 20, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '010', 
    category: '', 
    time: 'Today, 10:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '009', 
    category: '', 
    time: 'Yesterday, 11:40pm', 
    amount: 649, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '008', 
    category: '', 
    time: 'Yesterday, 6:00pm', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '007', 
    category: '', 
    time: 'Yesterday, 11:30am', 
    amount: 2200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '006', 
    category: '', 
    time: 'Yesterday, 09:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '005', 
    category: '', 
    time: 'Yesterday, 10:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    {  
    txnId: '004', 
    category: '', 
    time: 'Yesterday, 09:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '003', 
    category: 'Travel', 
    time: 'Today, 12:20pm', 
    amount: 2300, 
    type: 'Business', 
    status: 'Pending', 
    images: [], 
    }, 
    { 
    txnId: '002', 
    category: 'Food', 
    time: 'Today, 12:02pm', 
    amount: 1000, 
    type: 'Business', 
    status: 'Rejected', 
    images: [], 
    }, 
    { 
    txnId: '001', 
    category: 'Food', 
    time: 'Yesterday, 07:00am', 
    amount: 200, 
    type: 'Business', 
    status: 'Approved', 
    images: [], 
    } 
]; 

です。機能をレンダリングマイ

componentDidMount() { 
AsyncStorage.getItem('allData').then(res => { 
    this.setState({ 
    allData: JSON.parse(res), 
    }); 
}); 
console.log(this.state.allData); 
} 

componentWillUnmount() { 
AsyncStorage.removeItem('allData'); 
AsyncStorage.setItem('allData', JSON.stringify(this.state.allData)); 
BackAndroid.removeEventListener('hardwareBackPress', this.handlesBackButton); 
} 

setCategory(index) { 
const newData = this.state.allData.map((item, i) => { 
    const value = item; 
    if (i === index) { 
    value.type = item.type === 'Personal' ? 'Business' : 'Personal'; 
    value.status = item.type === 'Personal' ? '' : 'Pending'; 
    value.category = item.type === 'Personal' ? '' : 'Select category'; 
    } 
    return value; 
}); 
AsyncStorage.mergeItem('allData', JSON.stringify(newData)); 
this.setState({ 
    allData: newData, 
}); 
console.log(this.state.allData); 
} 

が含まれ、以下の状態や小道具は何も問題はありません

return (
       <Transactions 
        allData={this.state.allData} 
        setCategory={(index, category) => { 
        const newData = this.state.allData.map((item, i) => { 
         const value = item; 
         if (index === i) { 
         value.category = category; 
         } 
         return value; 
        }); 
        AsyncStorage.mergeItem('allData', JSON.stringify(newData)); 
        this.setState({ 
         allData: newData, 
        }); 
        console.log(this.state.allData); 
        }} 
        onChange={this.setCategory.bind(this)} 
       />); 

。 AsyncStorageのすべてのものをコメントアウトし、状態と小道具を記録すると、期待される結果が得られます。

ここでの主な問題は、AsyncStorage.getItemが原因であると思います。この方法がなければ、すべての機能と機能が期待通りに機能します。私はcomponentWillUpdateとcomponentWillMountの中に入れてみました。同じ結果が得られました。私は間違って何をしていますか?

誰かお手伝いください。

答えて

0

AsyncStorage.getItem( 'allData')を呼び出したときに、プロミスから返される最初の項目はエラーオブジェクトです。 2番目の項目は、必要なデータになります。

これを試してみてください。それを指摘して

AsyncStorage.getItem('allData').then((error, res) => { 
    this.setState({ 
    allData: JSON.parse(res), 
    }); 
}); 
+0

感謝を。愚かな私。 –

関連する問題