0

フラグメントの onActivityCreated 内で JsonObject リクエストを使用しています。jsonobject リクエストをリクエスト キューに追加しています。キューはまったく実行されていません。Onresponse と Onerrorresponse に Log ステートメントを入れました。リクエストがまったく開始されていないようです。以下は私のコードです。何か間違ったことをしている場合は提案してください。サーバーに文字列を渡す必要があります。だから私はそれをjsonobject jlistnameに入れています。サーバーはjsonobjectを返すので、それを受け取るには、stringrequestの代わりにjsonobjectrequestを使用します。

RequestQueue rq;
JsonObjectRequest jsObjRequest;
JSONObject jlistname = new JSONObject();
String listname="list1";

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    searchitembtn=(ImageButton) getView().findViewById(R.id.searchitembtn);
    rq = Volley.newRequestQueue(getActivity());
    try {
        jlistname.put("listname", listname);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    jsObjRequest = new JsonObjectRequest(Request.Method.POST, getlistitems, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.i(TAG, "im in onresponse" + response);
                    System.out.println(response);
                 }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.i(TAG, "im in onerrorresponse" + error);
                }
            }) {
        @Override
        public byte[] getBody() {
            return jlistname.toString().getBytes();
        }

        @Override
        public String getBodyContentType() {
            return "application/json";
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", "application/json");
            return headers;
        }
    };


    if (listtype==100||listtype==101){
        -----------------------
        }
    else if(listtype==102){
        Log.i(TAG,"mylisttypeis102: "+listtype);
        Log.i(TAG,"im before adding o request queue"+jsObjRequest);
        rq.add(jsObjRequest);
        Log.i(TAG, "im after adding o request queue"+rq);
    }
    else {
       -------------------
        }

    }
     showLists();

}

更新: レイアウトにボタンを追加し、ボタンの onclicklistener に rq.add(jsObjRequest); を保持しました。

その後、私は正しく応答を得ています。

しかし、私は本当にクリック時の応答を望んでいません。onActivityCreated のコードに従って、フラグメントがロードされたときに応答が生成されるようにします。

リスナーのみを使用して応答を取得する理由を誰かが説明できますか?

4

1 に答える 1