我试图将我的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
正确打印。代码的Volley部分中的theMatchingContacts
也是如此。我无法将Intents代码放入Volley调用中,因为我的活动需要在调用startActivity
之前做其他事情
答案 0 :(得分:1)
Volley在后台线程中异步执行请求。所以主线程中的执行顺序如下:
getPhoneContacts();
被称为Activity
PopulistoListView
以theMatchingContacts
theMatchingContacts
中设置onResponse
的值。 因此,当您开始PopulistoListView
Activity
时,theMatchingContacts
的值仍为null
,因为排球请求尚未完成。
答案 1 :(得分:1)
您应该执行在Volley Request的OnResponse
回调方法中启动新活动的代码,因为正如Bob所说,Volley Request是异步的,您希望在此请求完成后转到下一个Activity。