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

时间:2018-02-14 15:31:27

标签: 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 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名称放在我的Manifest上,但仍然没有发生

<application android:name=".GlobalClass">

3 个答案:

答案 0 :(得分:1)

这是错误的:

GlobalClass globalVariable = new GlobalClass();
globalVariable.setFirstName(fName.getText().toString());

Android会负责创建您在Application中定义的<application android:name=".GlobalClass">一个实例。对你而言,那将是GlobalClass

然后,您只需要执行此操作即可访问一个共享Application

(GlobalClass)context.getApplication

无论如何,如果您需要访问应用程序的生命周期,则只应扩展Application。在这种情况下,你不应该。你最好创建一个简单的singleton

public class GlobalClass{

    private static GlobalClass globalClass;

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

然后,像这样使用它:

GlobalClass.getInstance();

答案 1 :(得分:0)

发送您的数据需要将其放入putExtra中,您可以通过执行此操作的片段来执行此操作

从活动中,您可以将数据发送到Fragment

Bundle bundle=new Bundle();
bundle.putString("message", "From Activity");
  //set Fragmentclass Arguments
Fragmentclass fragobj=new Fragmentclass();
fragobj.setArguments(bundle);

请记住,message是您的关键,&#34;来自活动&#34;是消息的内容,因此您可以更改&#34;来自活动&#34;使用fName.getText().toString(),您将在其他片段中获得以下内容..

并在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);

使用putInt或任何您想要的内容更改putString

在你的其他片段中检索它

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

希望它有所帮助!

答案 2 :(得分:0)

我遇到了同样的问题,我只是在声明变量时声明了静态并解决了。

public class GlobalVClass extends Application {

    //static added here
    public static String ReturnValue;

    public String getReturnValue() {
        return ReturnValue;
    }

    public void setReturnValue(String returnValue) {
        ReturnValue = returnValue;
    }
}