2017-02-24 33 views
0

喜第一次运行时我有2个活动(main_activitysec_activity)当我去sec_activity我运行volley请求,并获得价值,并作出Toast打印sec变量(sec是有效的, Toast打印sec成功),但是当我想Toastvolley请求sec是空如何值设置为变量在android系统

如果我回到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.makeText(send_new_content.this, "in here is valid"+sec, Toast.LENGTH_SHORT).show(); 

,并在此吐司是无效的:

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

感谢您的帮助

+0

我没有真正理解你的问题,但当你回到main并返回时,第二个敬酒是有效的,因为你将变量sec声明为静态(这是一个非常糟糕的事情:)) –

回答

1

这是因为volley默认处理后台线程上的请求,即使你不能重做查询UI线程,Toast显示为空sec值是因为它没有等待服务器响应,在该响应中您将某个值分配给sec,它在volley的响应回调方法被调用之前运行。

如果您依赖于服务器端数据,则只有在收到服务器响应后才应该继续。您可能还会向用户展示一些等待的对话。