2017-02-24 57 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的響應回調方法被調用之前運行。

如果您依賴於服務器端數據,則只有在收到服務器響應後才應該繼續。您可能還會向用戶展示一些等待的對話。