当我重新创建我的Activity(更改设备方向)并且我正在等待Volley请求响应时," onResponse"上的代码因为它在被破坏的活动上运行而无效。
这是基本情况。为了方便起见,我只使用" mWaitingServerResponse"作为关键信息。这很好用:
public void onLoginButtonClick(View view) {
// Store we are waiting for server
mWaitingServerResponse = true;
sendLoginRequest();
}
public void sendLoginRequest() {
StringRequest loginRequest = new StringRequest(
Request.Method.GET, url, null,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Store we are not waiting for server anymore
mWaitingServerResponse = false;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Store we are not waiting for server anymore
mWaitingServerResponse = false;
}
});
mVolley.addToRequestQueue(loginRequest);
}
然后&#34; mWaitingServerResponse&#34;的值记住了savedInstanceState。
因此,当运行onResponse时,它会更改&#34; mWaitingServerResponse&#34;的值。在被破坏的活动上,而不是在设备方向改变后创建的活动上。我怎样才能对新活动进行onRespond行动?
答案 0 :(得分:0)
对于有类似问题的其他人的自我回答:
现在我将尝试从setRetainInstance(true)
的片段发送请求。这样,由于配置更改(例如设备方向)而重新创建Activity不会影响它。
为了避免泄漏,我认为应该在片段onDestroy()
上取消请求,并且片段不能包含对与Activity绑定的对象的任何引用,例如Drawable,Adapter,View或与上下文关联的任何其他对象。