java - 如何在android中首次运行时为变量设置值

标签 java android variables scope

嗨,我有 2 个 Activity (main_activitysec_activity),当我转到 sec_activity 时,我运行一个 volley请求并获取值并创建一个 Toast 来打印 sec 变量(sec 有效且 Toast 打印 成功)但是当我想Toastvolley请求时sec为空

如果我返回main_activity并再次转到sec_activity 2 Toast有效

这是我的代码:

private static String sec;
//other variables
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send_new_content);

    JsonArrayRequest movieReq = new JsonArrayRequest("url example",
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    for (int i = 0; i < response.length(); i++) {
                        try {
                            JSONObject obj = response.getJSONObject(i);

                            try {

                                sec = new String(obj.getString("sec").getBytes("ISO-8859-1"), "UTF-8");
                                Toast.makeText(send_new_content.this, "in here is valid"+sec, Toast.LENGTH_SHORT).show();
                                //other values
                            } catch (UnsupportedEncodingException e1) {
                                e1.printStackTrace();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }}
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }});
    AppController.getInstance().addToRequestQueue(movieReq);

    Toast.makeText(send_new_content.this, "in here is empty "+sec, Toast.LENGTH_SHORT).show();
}

}

在此 toast 中有效:

Toast.makeText(send_new_content.this, "in here is valid"+sec, Toast.LENGTH_SHORT).show();

并且在此 Toast 中无效:

 Toast.makeText(send_new_content.this, "in here is empty "+sec, Toast.LENGTH_SHORT).show();

感谢您的帮助

最佳答案

这是因为 volley 默认情况下会在后台线程上处理请求,即使您无法在 UI 线程上发出请求,Toast 显示为空 sec 值是因为它不等待服务器响应,您在其中为 sec 分配一些值,它在调用 volley 的响应回调方法之前运行。

如果您依赖服务器端数据,则只有在收到服务器响应后才应继续操作。在此之前您还可以向用户显示一些等待对话框。

关于java - 如何在android中首次运行时为变量设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42444388/

相关文章:

java - 如何使用struts2预填充复选框列表

java - FileWriter 仅在没有 GUI 的情况下工作

Javascript 函数变量范围直通地理定位

java计算器jFrames的简单科学模式使用

java - 如何修复 JpaRepository 不保存且存储库为空的错误

android - 如何将 GridView 的选择模式设置为多个?

android - Android Content Provider 的实例化顺序

android - 无法在 AVD 中启动应用程序

Python:全局变量、前缀为 "self."的变量、局部变量之间有什么区别?

string - 批处理 : Concatenate two arbitrary strings outside SETLOCAL EnableDelayedExpansion