0

こんにちは、別の回答で探していた2つのアクティビティに文字列を渡したいのですが、これを試しました:

public class GlobalVars extends Activity {
private static String winename;

public static String getWineName(){
    return winename;
}
public static void setWineName(String s){
    winename=s;
}

}

アクティビティ 1 の文字列を次のように設定します。

EditText searchbox=(EditText) findViewById(R.id.buscarmainText);
String searchb=searchbox.getText().toString();
GlobalVars.setWineName(searchb);

しかし、アクティビティ 2 で getWineName メソッドを呼び出すと、文字列 winename が空であるように見え、次のように呼び出されます。

public String sbuscar=GlobalVars.getWineName();

何が間違っているのかわかりません。

4

2 に答える 2

2

Its better to pass string between activities with intents

In your first activity class:

Intent i = new Intent(this, activity2.class);
i.putExtra("KEY",YourData);

In next activity class

Bundle extras = getIntent().getExtras();
if(extras !=null) {
    String value = extras.getString("KEY");
}
于 2012-11-29T03:16:50.707 に答える
1

このようなホルダー クラスにグローバル変数を配置する必要があります。

public class GlobalVars {
     public static final String KEY_WINENAME = "winename";
     private static HashMap<String, String> globalVars = new HashMap<String, String>();

     public static String getGlobalVariable(String key) {
         return globalVars.get(key);
     }
}

次に、アプリの任意のコンポーネントから呼び出しを行うことができますGlobalVars.getGlobalVariable(GlobalVars.KEY_WINENAME);

あるアクティビティから次のアクティビティに文字列を渡したいだけの場合は、Ram kiran が回答したようにインテントを使用する必要があります。通常、これがベスト プラクティスです。

また、このコードが呼び出されている場所を確認する必要があります。

EditText searchbox=(EditText) findViewById(R.id.buscarmainText);
String searchb = searchbox.getText().toString();
GlobalVars.setWineName(searchb); 

たとえば、向きを変更すると、EditText 状態が維持されない可能性があるため、その中のテキストが再び空になり、コードが再度呼び出されて変数が空になります。不明な場合は、内部にログ行を入れて、setWinename()2 回呼び出されたかどうかを確認してください。

于 2012-11-29T03:46:51.713 に答える