2017-08-05 7 views
3

私はVolleyを使ってネットワークコールを学習していました。私はこれがむしろ奇妙なことを発見したので、なぜこれが起こるのかだけを考えたい。 android developer guideにはVolleyと似た例がありましたが、私はちょっと変わってレスポンスが文字列responseJSONに保持され、それを使ってアクティビティのtextViewに設定しました。私は内onResponse()機能をのTextView を設定すると、その結果はTextViewの(コメント行)に表示されているが、私はの外側の関数にそれを行う場合responseJSON文字列がnullをオン(私はトーストを経由してチェックされる)ので、以下に示すようにtextViewは空白になります。なぜこれが起こるのですか?なぜresponseJSONは単にレスポンスにバインドしないのですが、スコープはまだ有効なので、なぜこれが起こるのか理解できません。あなただけのTextViewにテキストを設定しているmTextView.setText(reponseJSON);さらなる使用のためにVolley応答値を保持することができません。それはヌルに変わります。

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

あなたはインターネット許可を持っていますか?**メインフェストでは、 **? –

+0

onResponseメソッド内でmTextView.setText(reponseJSON)を使用しているときに問題が発生していないことがわかりました。なぜなら、結果がなく、理由を知りたいからです。 –

答えて

2

あなたonCreate方法は、あなたがreponseJSONオブジェクト参照を設定していない、

そして、あなたのStringRequestが非同期要求で、応答が一度、少し後に来ますあなたはreponseJSONオブジェクトに設定する応答を得ました。値をテキストビューに追加する場合は、テキスト値を再度設定する必要があります。

+0

私はonResponse()内で応答を設定すると、私は応答を受け取った後にそれを設定して出力を表示しますが、上記のケースでは応答を受け取る前に設定していますのでnullですか? –

+1

はい、あなたは正しく、nullになります。 –

関連する問題