0

嗨,我想通过两个活动传递一个字符串,我一直在另一个答案中寻找它并尝试了这个:

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

最好在有意图的活动之间传递字符串

在您的第一个活动课程中:

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

在下一个活动课上

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 回答的 Intent。通常这是最佳实践。

您还应该查看这段代码的调用位置:

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

例如,如果您更改方向,您可能不会保持 EditText 状态,因此其中的文本再次变空,并且您的代码再次被调用以清空变量。如果你不确定在里面放一个日志行setWinename()来检查它是否被调用了两次。

于 2012-11-29T03:46:51.713 回答