2017-01-18 1 views
0

私はAndroidアプリを作成しています。機能の1つは、ユーザーから何らかのデータ(品目名、品目ID、およびバーコード文字列)を収集することです。アンドロイドのアクティビティ間でデータを一時的に保持および復元する正しい方法は何ですか?

アクティビティ1はフォームです。ユーザーは項目名と項目番号を手動で入力します。バーコード文字列の場合、ユーザーが「スキャン」ボタンをクリックすると、アクティビティ2(スキャナー)が開始され、バーコードをスキャンして読み取る。バーコードが読み取られると、Activity1(フォーム)が再び開始され、すべてのデータがフォームに表示されます。

アクティビティ2がインテントによって開始されると、アクティビティ1が強制終了されます。だから、私は項目名と品目番号を取得し、意図を見つめる前に一時的に保管しなければならない。その後、Activity1が再び開始されると、それらのデータは再びフォームに表示されます。

私はIntent Extraを使って項目名と番号を保持し、それをActivity2に渡してActivity1に戻すことを考えています。 Activity2にこれらのデータが必要ないとすれば、それがこのシナリオで正しい方法であるのだろうかと思います。もっと良い方法はありますか?代わりに共有設定を使用する必要がありますか?

+0

*アクティビティ2がインテントによって開始されると、アクティビティ1は明示的に破棄した場合にのみ殺されます。それは事実ですか?もしそうなら、なぜですか? –

+0

@MLACに関する質問:あなたは心配する必要はありません。最初の活動は決して殺されません。必要な情報を保存するために、通常のセーブ/リストアのインスタンス状態メカニックを使用することができます(私が何をしているのかわからない場合は、Googleの「インスタンス状態を復元する」)。 –

+0

私が今問題を抱えているのは、Activity1からActivity2に行くために意図を使うと、Activity1とフォームのデータがなくなってしまうことです。したがって、Activity1を再び起動すると、以前のデータなしでアクティビティが作成されます。だから私はActivity2を開始する前にデータを保存しなければならない。 – MLAC

答えて

-5

SharedPreferencesを使用できます。 あなたがここでそれらを使用する方法を学ぶことができます: https://www.tutorialspoint.com/android/android_shared_preferences.htm https://developer.android.com/training/basics/data-storage/shared-preferences.html

SharedPreferencesは、このような用途のために本当に良い解決策です。それは非常に簡単で使いやすく実装も簡単です。あなたの最初の活動の使用では

+0

彼はsharedpreferencesを使うことができることを知っています。なぜそれをお勧めしますか?なぜインテントでデータを返信して活動結果を使用しないのですか? –

+0

これは、Activity1に戻って再度データをロードしたいので、非常に多くの変数を作成するためのメモリの無駄な浪費になります。それには2つのインテントが必要です。 Activity1からActivity2にデータを送信し、もう1つはActivity2からActivity1にデータを送信します。それは必要なスレッドとメモリを浪費します。 'SharedPreferences'はマシン上でより簡単で軽いです。 –

+0

あなたは、ディスク上のファイルに保存されているsharedpreferencesの書き込み/読み込みは、データフィールドをインテントに追加するよりも速いと思いますか? –

0

このような意図にput extra引数:

// Assuming Activity2.class is second activity 
Intent intent = new Intent(this, Activity2.class); 
intent.putExtra("variable_name", var); // here you are passing var to second activity 
startActivity(intent); 

次のように引数を取得後、第2の活動に:

String var2 = getIntent().getStringExtra(variable_name); 
+0

これは私が今やっていることです:Intent Extra(つまり.putExtra)を使ってデータを持ち歩くことです。または「Shared Preferences」を使用してローカルファイル内のデータを一時的に保持する必要がありますか?共有設定がより良い方法になるのだろうかと思います。共有設定の場合、ローカルストレージは... – MLAC

+0

putExtraを使用すると、1サイクルだけデータを保存できます。つまり、アプリケーションを終了すると、保存されたデータは失われます。しかし、共有環境設定の場合は、アプリケーションを終了してからアプリケーションを再度開いた後でもデータを反復することさえできます。共有設定は、保存するために少量のデータが必要な場合にSQLiteの場所として使用されます。 –

+0

あなたのユースケースでは、共有環境設定を使用することをお勧めします。 –

0

あなたはシングルトンクラスを作成し、セッターを公開することができ(のためのモデルオブジェクト(ここでは2つのプライベート文字列変数)のメソッドの取得(取得用)とゲッター(取得用)。このクラスはアプリケーションと共に生きています。

public class MyClass{ 
private static MyClass instance=null; 
public static getInstance(){ 
if(instance==null){ 
instance=new MyClass(); 
} 
return instance; 
} 


private String itemName; 
private String itemNumber; 
//setter and getter methods here 
} 
0

なぜあなたのスタートを変更 、活動あなたの活動2の1

宣言private int SCAN_BARCODE_REQUEST = 101;

、その後

//finish(); dont use this to destroy activity 1 
startActivityForResult(new intent(this,Activity2.class), SCAN_BARCODE_REQUEST); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == SCAN_BARCODE_REQUEST) { 

     if (resultCode == RESULT_OK) { 
      String barcode = data.getStringExtra("BARCODE"); 

      //handle your barcode string here 
     } 
    } 
} 

を呼び出そうと、活動1を殺すために必要がありますアクティビティ1:

Intent intent = new Intent(); 
intent.putExtra("BARCODE", barcodeString); 
setResult(RESULT_OK, intent); 
finish(); 
関連する問題