2017-02-06 5 views
0

정상적인 포스트 메소드를 사용하는 발리 라이브러리를 통해 api를 소비 할 수는 있지만 PHP 팀은 json을 수용하는 API를 변경했습니다. 나는 volleyJsonObjectrequest이 있다는 것을 알고 있지만`JsonObjectRequest '에 매개 변수를 두는 방법을 모른다. 도움이 필요한 경우발리 라이브러리 안드로이드를 통해 PHP Api를 소비하는 동안 문제가 발생했습니다.

PHP의 API

<?php 
if($_SERVER['REQUEST_METHOD']=='POST'){ 
$data_back = json_decode(file_get_contents('php://input')); 
header("Content-type: application/json"); 
require "conn.php"; 
$id = $data_back->{"id"}; 
$address = $data_back->{"address"}; 
$pincode = $data_back->{"pincode"}; 
$name = $data_back->{"name"}; 
$mobile = $data_back->{"mobile"}; 

$sql = "UPDATE tbl_addressbook SET name = '$name', address = '$address', pincode = '$pincode', mobile = '$mobile' WHERE id = $id"; 

if(mysqli_query($conn,$sql)){ 
    echo 'Address Book Updated Successfully'; 
} 
else{ 
    echo 'Could Not Update Your Address Book'; 
    } 
} 
?> 

발리 요청

StringRequest stringRequest=new StringRequest(Request.Method.POST, Config.UPDATE_ADDRESS_BOOK, 
           new Response.Listener<String>() { 
            @Override 
            public void onResponse(String response) { 
             Toast.makeText(mContext,"Address Changed",Toast.LENGTH_LONG).show(); 
             list.set(getAdapterPosition(),new AddressBookModel(bookModel.getId(), 
               etName.getText().toString(), 
               etAddress.getText().toString(), 
               etPinCode.getText().toString(), 
               etPhone.getText().toString(), 
               bookModel.getDefAddress())); 
             d.dismiss(); 
             progress.dismiss(); 
             ((Activity)mContext).runOnUiThread(new Runnable() { 
              @Override 
              public void run() { 
               notifyDataSetChanged(); 
              } 
             }); 
            } 
           }, new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError error) { 
           Toast.makeText(mContext,"Something Went Wrong \n ttry again later",Toast.LENGTH_LONG).show(); 
          } 
         }){ 
          @Override 
          protected Map<String, String> getParams() throws AuthFailureError { 
           Map<String, String> map=new HashMap<String, String>(); 
           map.put("id",bookModel.getId()); 
           map.put("name",etName.getText().toString()); 
           map.put("address",etAddress.getText().toString()); 
           map.put("pincode",etPinCode.getText().toString()); 
           map.put("phone",etPhone.getText().toString()); 
           return checkParams(map); 
          } 
          private Map<String, String> checkParams(Map<String, String> map){ 
           Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); 
           while (it.hasNext()) { 
            Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next(); 
            if(pairs.getValue()==null){ 
             map.put(pairs.getKey(), ""); 
            } 
           } 
           return map; 
          } 
         }; 
         VolleySingleton.getInstance(mContext).addToRequestQueue(stringRequest); 
+0

응답 I의 포스 테에서보세요 디. 그것은 당신을 도와야합니다. – AnixPasBesoin

답변

2

쉬운 치즈 맛이 나는 레몬 squeezy

일부 코드

HashMap<String, String> params = new HashMap<String, String>(); 
params.put("id", "300"); 
params.put("address", "Mars"); 
params.put("pincode", "***"); 
params.put("name", "Jon Skeet"); 
params.put("mobile", "911"); 
JsonObjectRequest request = new JsonObjectRequest(
          /*URL*/, 
          new JSONObject(params), 
          new Response.Listener<JSONObject>(){/*...*/}); 
+0

응답 내용이 문자열 형식 인 경우 어떻게해야합니까? 오류 응답 섹션에서 직접 이동합니다. –

2

먼저 당신 된 JSONObject를 만들기

JSONObject js = new JSONObject(); 
    try { 
     js.put("email", "adasda"); 
     js.put("address", "adasd"); 
     js.put("pincode", "adadasd"); 

    }catch (JSONException e) { 
      e.printStackTrace(); 
    } 
다음

당신의 JSON 요청

처럼, GET 헤더에서주의 깊게 살펴 .

JsonObjectRequest jsonObjReq = new JsonObjectRequest(
    Request.Method.POST,url, js, 
    new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      Log.d(TAG, response.toString()); 

      msgResponse.setText(response.toString()); 
      hideProgressDialog(); 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error: " + error.getMessage()); 
      hideProgressDialog(); 
     } 
    }) { 

/** 
* Passing some request headers 
* */ 
@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    HashMap<String, String> headers = new HashMap<String, String>(); 
    headers.put("Content-Type", "application/json; charset=utf-8"); 
    return headers; 
} 
+0

도움 주셔서 감사합니다 ... 부스 답변은 훌륭하게 작동합니다.하지만 답변을 upvote 할 것입니다. –

-2

개인 무효 getWalletDetails() {

final ProgressDialog pDialog; // = new ProgressDialog(mcontext); 
    StringRequest stringRequest; 

    pDialog = GifDialog.ctor(mcontext); 
    pDialog.show(); 

    stringRequest = new StringRequest(Request.Method.POST, place your url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String s) { 
        //Disimissing the progress dialog 
        pDialog.dismiss(); 
        //Showing toast message of the response 

        try { 

         JSONObject jsonObject = new JSONObject(s); 

         totbal.setText("\u20B9 "+jsonObject.getString("avail_balance")); 
         JSONArray jsonArray = jsonObject.getJSONArray("tx_detail"); 

         for (int i = 0; i < jsonArray.length(); i++) { 

          JSONObject object = jsonArray.getJSONObject(i); 
          mode = new Model_Wallet_Transaction(); 
          mode.setStr1(object.getString("date")); 
          mode.setStr4(object.getString("insert_time")); 
          mode.setStr2(object.getString("name")); 

          mode.setStr3(object.getString("transaction_id_no")); 
          mode.setAmount(object.getString("amount")); 
          mode.setTxtype(object.getString("tx_type")); 
          modlist.add(mode); 
         } 
         // Collections.sort(modlist, new StringDateComparator()); 
         adp = new CustomAdapter_Wallet_Transaction(getApplicationContext(), modlist); 
         list.setAdapter(adp); 

        } catch (Exception e) { 

         Log.e("Error", e.toString()); 
        } 
        // Toast.makeText(Wallet_Transaction.this, s, Toast.LENGTH_LONG).show(); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError volleyError) { 
        //Dismissing the progress dialog 
        pDialog.dismiss(); 
        //Showing toast 
        //Toast.makeText(Wallet_Transaction.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); 
       } 

      }) { 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 

      //Creating parameters 
      Map<String, String> params = new Hashtable<String, String>(); 
      //Adding parameters 
      params.put("user_id", UserId);   
      params.put("deviceId", DeviceId); 

      return params; 
     } 
    }; 

    //Creating a Request Queue 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    //Adding request to the queue 
    requestQueue.add(stringRequest); 
} 
+0

[DRY] (https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRfJOOBbrcra9IBbvPsk0c1u5JR78hZDhnsN16ych6Mva5XREHn). 당신은 Volley가 이미 당신을 위해하는 일을하고 있습니다. 바퀴를 재발 명하지 마십시오. – AnixPasBesoin