当我转到main_activity
我运行sec_activity
请求并获取价值并生成sec_activity
时,我有2项活动(volley
和Toast
)打印sec
变量sec
有效,Toast
打印sec
成功)但当我想要Toast
volley
请求{{ 1}}是空的
如果我回到sec
并再次转到main_activity
则sec_activity
有效
这是我的代码:
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();
感谢您的帮助
答案 0 :(得分:1)
这是因为volley
默认处理后台线程上的请求,即使您无法在UI线程上发出请求,显示空Toast
值的sec
也是因为它不等待您为sec
分配一些值的服务器响应,它在调用volley的响应回调方法之前运行。
如果您依赖服务器端数据,则只应在收到服务器响应后继续操作。在此之前,您还可以向用户显示一些等待对话框。