在活动之间传递字符串

时间:2012-11-29 03:12:51

标签: android string android-activity

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

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();

不知道我做错了什么。

2 个答案:

答案 0 :(得分:2)

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

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

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

在下一个活动类

Bundle extras = getIntent().getExtras();
if(extras !=null) {
    String value = extras.getString("KEY");
}

答案 1 :(得分: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);

如果您只想将String从一个活动传递到下一个活动,您应该使用一个Intent,因为Ram kiran已经回答了。通常这是最好的做法。

此外,您应该看看这段代码被调用的位置:

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

例如,如果更改方向,则可能无法维护EditText状态,因此其中的文本将再次变为空,并且再次调用代码清空变量。如果您不确定在setWinename()内放置一条日志行来检查它是否被调用了两次。