2017-08-18 36 views
0

我試圖將我的Volley響應分配給一個變量,所以我可以使用意圖將值傳遞給另一個活動。如何將我的排球反應變爲變量,以便我可以使用意圖將值傳遞給另一個活動?

我想知道爲什麼我的theMatchingContacts字符串在logcat中顯示null。我看到the matching contacts are null

我有theMatchingContacts在我活動的頂部聲明:

public class VerifyUserPhoneNumber extends AppCompatActivity { 

String theMatchingContacts; 

如果用戶註冊的應用程序,這是的話,那麼在onCreate

else { 

     getPhoneContacts(); 

     // then start the next activity 
     Intent myIntent = new Intent(VerifyUserPhoneNumber.this, PopulistoListView.class); 
     //we need phoneNoofUser so we can get user_id and corresponding 
     //reviews in the next activity 
     myIntent.putExtra("keyName", phoneNoofUser); 
     myIntent.putExtra("JsonArrayMatchingContacts", theMatchingContacts); 
     System.out.println("phonenoofuser" + phoneNoofUser); 
     System.out.println("the matching contacts are " + theMatchingContacts); 

     VerifyUserPhoneNumber.this.startActivity(myIntent); 

我看到phoneNoofUser好吧,那有效。但是對於theMatchingContacts它打印null。而getPhoneContacts()發生在Intents部分調用下面的抽籤代碼之前,所以getMatchingContacts應該被初始化,對吧?

我凌空代碼,再往下,就是:

StringRequest stringRequest = new StringRequest(Request.Method.POST, CHECKPHONENUMBER_URL, 
     new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
        System.out.println(response); 

       theMatchingContacts = response.toString(); 

       System.out.println(theMatchingContacts); 

        etc...etc... 

response打印正確。在代碼的排列部分,theMatchingContacts也是如此。我不能將Intents代碼放入Volley呼叫中,因爲在呼叫之前我的活動需要做其他事情startActivity

+0

如果你想做任何主線程相關的工作,然後嘗試使用'runOnUiThread()'方法 –

回答

1

您應該執行啓動新的活動OnResponse Volley Request的回調方法的代碼,因爲如Bob所說,Volley請求是異步的,並且您希望在此請求完成時轉到下一個活動。

1

Volley在後臺線程中異步執行請求。因此,在主線程執行的順序是這樣的:

  1. getPhoneContacts();
  2. 凌空開始在輔助線程的網絡請求
  3. ActivityPopulistoListView開始與空值theMatchingContacts
  4. 排球請求已完成,並在onResponse中設置了theMatchingContacts的值。

所以你的時候開始的PopulistoListViewActivitytheMatchingContacts值仍然null,因爲排球請求尚未完成。

相關問題