无法保留Volley响应值以供进一步使用,它将变为空

时间:2017-08-05 22:43:26

标签: java android android-volley

我只是在试验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);

    }
}

1 个答案:

答案 0 :(得分:2)

您的onCreate方法mTextView.setText(reponseJSON);您只是将文本设置为textview,而您没有设置reponseJSON对象引用,

你的StringRequest是一个异步请求,一旦你得到你将设置为reponseJSON对象的响应,响应将会很晚。如果要将值更改为文本视图,则应再次设置文本值。