Java 全局变量在Intent之后始终为空

Java 全局变量在Intent之后始终为空,java,android,android-studio-3.0,Java,Android,Android Studio 3.0,片段更改后,我的全局变量变为空。我从别人的帖子中走了好几步,但还是没能理解。谁能解释一下,帮我解决这个问题 GlobalClass.java public class GlobalClass extends Application{ private static String firstName; private static String middleName; public String getFirstName() { return firstName; } public v

片段更改后,我的全局变量变为空。我从别人的帖子中走了好几步,但还是没能理解。谁能解释一下,帮我解决这个问题

GlobalClass.java

public class GlobalClass extends Application{

private static String firstName;
private static String middleName;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getMiddleName() {
    return middleName;
}

public void setMiddleName(String middleName) {
    this.middleName = middleName;
}

}
活动Java

我使用以下方式存储:

GlobalClass globalVariable = new GlobalClass();
globalVariable.setFirstName(fName.getText().toString());
我也试着把我的GlobalClass名字放在我的清单上,但仍然没有任何结果

<application android:name=".GlobalClass">

要发送数据,您需要将数据放入putExtra,您可以通过执行以下操作来完成此操作

从“活动”中,您可以将数据发送到片段

Bundle bundle=new Bundle();
bundle.putString("message", "From Activity");
  //set Fragmentclass Arguments
Fragmentclass fragobj=new Fragmentclass();
fragobj.setArguments(bundle);
请记住,
message
是您的关键,而“From Activity”是消息的内容,因此您可以使用
fName.getText().toString()
更改“From Activity”,然后在其他片段中获得下面的内容

并在您的Fragment onCreateView中获取它

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
          String strtext=getArguments().getString("message");

    return inflater.inflate(R.layout.fragment, container, false);
    }
通常,从片段到活动,您应该这样做以获取变量内容

Intent intent = new Intent(getActivity().getBaseContext(),
                        TargetActivity.class);
                intent.putExtra("message", message);
                getActivity().startActivity(intent);
并在您的活动中获得此值

Intent intent = getIntent();
String message = intent.getStringExtra("message");
基本上,您可以这样做来放置一个值并检索它

估价

Bundle bundle = new Bundle();

    bundle.putInt(key, value);
    fragment.setArguments(bundle);
使用
putString
或任何您想要的内容更改
putInt

在另一个片段中检索它

Bundle bundle = this.getArguments();
if (bundle != null) {
    int i = bundle.getInt(key, defaulValue);
}
希望有帮助

这是错误的:

GlobalClass globalVariable = new GlobalClass();
globalVariable.setFirstName(fName.getText().toString());
Android负责创建您在
中定义的
应用程序的一个实例:

然后,像这样使用它:

GlobalClass.getInstance();

我也面临同样的问题,在声明变量及其已解决的问题时,我只声明static

公共类GlobalClass扩展应用程序{
//这里添加了静态
公共静态字符串返回值;
公共字符串getReturnValue(){
返回值;
}
public void setReturnValue(字符串returnValue){
ReturnValue=ReturnValue;
}
}

在存储了fName的值之后,在其他片段中如何调用它们?@lDroid我使用GlobalClass globalVariable=new GlobalClass()调用它们;globalVariable.getFirstName()。但是如果变量是静态的,我会得到“null”,那么就可以让getter/setters是静态的,并通过名称访问它。无需在任何地方创建类的实例。此外,静态变量可以在任何活动暂停/暂停期间清除,因此它可能是错误的来源,否则我们需要有关如何再现错误的更多信息(加上stacktrace0@MarcosVasconcelos是的,可能是因为我创建了一个静态变量。我试图在第一个片段结束之前Toast它,它成功地在Toast上回响,但在第二个片段中丢失了。我试图将名称放在全局变量上,以便在用户完成表单(被片段分割)后访问所有存储的信息从一个片段到另一个片段如何?只需做我发布的前两件事;)它应该可以工作我的应用程序在定义字符串frag1=getArguments().getString(“firstname”)后停止;在我的第二个片段中,logcat会说什么致命的异常:main位于com.sholomon.who.who.registerFragmentTwo.onCreateView,它是字符串frag1=bundle.getString(“firstname”);我按照您的步骤在我的第二个片段中放置bundle bundle=this.getArguments()
public class GlobalClass{

    private static GlobalClass globalClass;

    private GlobalClass() {
    }
    public static Logger getInstance() {
        if (globalClass == null) {
            globalClass = new GlobalClass();
        }
        return globalClass;
    }
}
GlobalClass.getInstance();