1

私が持っているものの簡単な概要とそれに関連する問題。PhoneGapを使用してネイティブアプリとして実行するHTML5アプリがあります。これは、地元のフィールド調査ステーション向けの小さなデータ収集アプリケーションです。

このフィールドステーションの問題は、データを送信するための信号を失う傾向があることです。したがって、後で使用するために(またはサーバーに送信するために)データをデバイスに保存したいと思います。

保存する必要のあるデータは次のとおりです。

*User Name (string)
*Transect Color (string)
*Transect Number (int)
*Transect Board (char)
*Salamander Name (string)
*Snount-Vent Length (int)
*Total Length (int)
*Centipedes (int)
*Red-Black Millipedes (int)
*Brown Round Millipedes (int)
*Brown Flat Millipedes (int)

アプリ自体はスタンドアロンアプリになるので、データを保存する方法が欲しいです。

jQueryとHTML5の組み合わせを使用して、これを行うための最良の方法は何でしょうか?Web SQLが非推奨になっていることは知っていますが、これがこのデータを格納する唯一の方法である可能性があります。そうでない場合、送信する前にX個のエントリを動的に保存するための最良の方法は何でしょうか。

助けてくれてありがとう。

編集:

研究者が「フルトランセクト」をしなければならないとき、この状況はどうですか...

研究者は、各トランセクトで20の完全なデータ収集が行われるまで、場所を移動する必要があります。これには20の異なる場所が必要であり、それぞれにさまざまな数のサンショウウオと生き物が入ります。

localstorageKey:Valueペアのみが許可されている場合、最後にオフロードするために、はるかに大きなデータセットをどのように保存しますか?

4

3 に答える 3

2

私はlocalStorageを小さなキー値ストアにラップすることの大ファンです。

window.storage = {
  store:localStorage,
  get: function( key ) {
    try {
      return JSON.parse(this.store[key]);
    } catch(e) {};
    return undefined;
  },
  set: function( key, value) {
    try {
      this.store[key] = JSON.stringify(value);
    } catch(e) {};
  }
}

これにより、window.storage直接参照できます。説明したフィールドが というハッシュにラップされていると仮定するとrow、直接シリアル化できるようになりました。

storage.set('myrow', row);

格納するデータはシリアル化されるため、単一の SQL 行よりも多くの情報を含むrowを作成できます。document

var document = {
  property: 'foo',
  nestedArray: [ 'foo', 'bar', 'baz' ],
  nestedObj: { 'key': 'foo', 'key2': 'foo' }
}

storage.set('transectID', document);

…お分かりですね。重要なのは、非常に豊富なデータであっても、復元可能な形式で削減JSON.stringifyおよび保存できることです。

于 2012-05-04T03:29:13.397 に答える
1

に大きなデータセットを格納することはお勧めできませんlocalStorage

WebSQLは非推奨ですIndexedDBは、より大きなブラウザー内データセットに最適なツールですが、PhoneGapではまだ利用できません(ロードマップ上にあると思われますが)。

直感に反して、WebSQL仕様はこれ以上開発されませんが、WebSQLは依然として最も広くサポートされているオプションですが、IndexedDBはまだ非常に初期段階です。

モバイルの場合と同様に、localStoreルートを使用する場合は、可能な限りメモリ内の表現を信頼し、メモリから読み取れない場合にのみ「ディスク」から読み取る必要があります。

于 2012-05-04T04:23:35.523 に答える
1

例えば:

var data = {
  name: 'x',
  transect_color: 'red'.
  .....
  ..
};

localStorage.setItem('mydata', JSON.stringify(data));  // mydata is the name of storage

データを取得するには、次のように試すことができます。

var temp = localStorage.getItem('mydata');

if(temp != null) {
  var dataJSON = JSON.parse(temp);
}

localStorage データをクリアする場合は、次のユーザーを使用します。

localStorage.clearItem('mydata');

次のように、複数のデータを保存できます。

var x = [];  // take an array to store all data

x.push({a: 'x', b: 'y'});

localStorage.setItem('mydata', JSON.stringify(x));

// for further entry

var temp = JSON.parse(localStorage.getItem('mydata')); // retrieve localStroage item

temp.push({a: 'xx', b: 'yy'})  // push new data to array

localStorage.setItem('mydata', JSON.stringify(t)); // overwrite the existing entry with new data

console.log(JSON.parse(localStorage.getItem('data'))); // you will see your all data here
于 2012-05-04T03:24:43.650 に答える