私は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);
}
}
あなたはインターネット許可を持っていますか?**メインフェストでは、 **? –
onResponseメソッド内でmTextView.setText(reponseJSON)を使用しているときに問題が発生していないことがわかりました。なぜなら、結果がなく、理由を知りたいからです。 –