我只是在试验Volley学习网络电话。我觉得这很奇怪所以我只想知道为什么会这样。 android developer guide有类似的Volley示例,我改变了一点,以便响应保存在字符串responseJSON
中,并使用它将其设置为活动中的textView。当我在onResponse()
函数中设置textView 时,结果会显示在textview(注释行)中,但如果我这样做在外面,则函数如下所示responseJSON
字符串变为null
(我通过toast检查),因此textView显示为空白。为什么会这样?为什么responseJSON
只是简单地绑定到响应,范围仍然有效,因此无法理解为什么会发生这种情况。
package com.example.imnobody.sampleprojectnetwork;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
public class MainActivity extends AppCompatActivity {
private String reponseJSON;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView mTextView = (TextView) findViewById(R.id.text);
RequestQueue queue = Volley.newRequestQueue(this);
String url ="https://www.google.com";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
reponseJSON = response;
//mTextView.setText(reponseJSON);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "nothing", Toast.LENGTH_SHORT).show();
}
});
queue.add(stringRequest);
mTextView.setText(reponseJSON);
}
}
答案 0 :(得分:2)
您的onCreate
方法mTextView.setText(reponseJSON);
您只是将文本设置为textview,而您没有设置reponseJSON对象引用,
你的StringRequest
是一个异步请求,一旦你得到你将设置为reponseJSON
对象的响应,响应将会很晚。如果要将值更改为文本视图,则应再次设置文本值。