ボレーではデータが返ってきません。 私の活動では、Listを取得する方法を作成しました。以下はボレーのonResponseのデータを取得していません
PackageActivity.java
private List<Package> preparePackageData() {
MakeNetworkRequest data = new MakeNetworkRequest(PackageActivity.this);
packageList = data.getAllPackage();
return packageList;
}
私MakeNetworkRequest.java
package com.lab.demo5;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
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;
import java.util.List;
public class MakeNetworkRequest{
private static final String JSON_URL = "http://localhost/android/package.php";
String response;
Context context;
private List<Package> packageList=null;
MakeNetworkRequest(Context ctx)
{
this.context=ctx;
}
protected List<Package> getAllPackage()
{
Log.d("getAllPackage","getAllPackage");
sendRequest();
return this.packageList;
}
public void sendRequest(){
StringRequest stringRequest = new StringRequest(JSON_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("onResponse","onResponse");
showJSON(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(context,error.toString(),Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(stringRequest);
}
private void showJSON(String json){
Log.d("showJSON","onResponse");
ParseJSON pj = new ParseJSON(json);
pj.parseResult();
this.packageList = pj.packageList;
}
}
である私は、ログに "getAllPackage" を取得していますが、それは、ログ "onResponse" 内のすべてのデータが表示されていません。
このコードをアクティビティに直接配置すると、同じコードで良い結果が得られます。
デバッガを使用してエラーを特定してみてください。 Androidスタジオでは、ブレークポイントを設定し、 'Ctrl + F9'ボタン(またはMacの場合は' Cmd + F9')を使用してこれを行います。 [これは簡単なチュートリアルです(https://www.youtube.com/watch?v=Vo5PXWnKtQ4)。 –
はい、問題をデバッグします。私がVolleyのネットワークスレッドのデータを取得しているMainthreadのデータにアクセスしているように見えます。今、メインスレッドでデータを取得する方法について質問します。私の呼び出しはこのようなものです。 PackageActivityにはrecyclerviewがあります - >ネットワークスレッド - > Listでデータを取得 - > setRecyclerview adapter->ここでnullがあります。 –
Volleyはあなたのスレッドと非同期のタスクを実行するので、 "onResponse"を表示するには時間がかかります。 –