嗨,我有 2 个 Activity (main_activity
和 sec_activity
),当我转到 sec_activity
时,我运行一个 volley
请求并获取值并创建一个 Toast
来打印 sec
变量(sec
有效且 Toast
打印 秒
成功)但是当我想Toast
出volley
请求时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/