2017-03-16 4 views
0

私はアプリを作ろうとしています。私は私のデータベースに自分のテーブルのデータを取得するのに苦労しています。私はテーブルからすべてを得る方法を知っていますが、今私はこのテーブルのほんの数行しか必要としません。だから私はIDを渡さなければならない。 問題は、JsonArrayRequestに任意のパラメータを追加できないことです。私は事をたくさん読んでますが、すべてのサーバに1つのパラメータを渡し、JsonArrayRequestを使って配列を取得します。

public class PlansActivity extends AppCompatActivity { 


    List<GetDataAdapter> GetDataAdapter1; 

    RecyclerView recyclerView; 

    RecyclerView.LayoutManager recyclerViewlayoutManager; 

    RecyclerView.Adapter recyclerViewadapter; 

    ProgressBar progressBar; 

    String GET_JSON_DATA_HTTP_URL = "http://travelb.000webhostapp.com/jsonData.php"; 
    String JSON_ID = "user_id"; 
    String JSON_NAME = "destination"; 
    String JSON_SUBJECT = "date"; 
    String JSON_PHONE_NUMBER = "plan_id"; 

    Button button; 

    PostJsonArrayRequest jsonArrayRequest ; 


    RequestQueue requestQueue ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_plans); 

     GetDataAdapter1 = new ArrayList<>(); 

     recyclerView = (RecyclerView) findViewById(R.id.recyclerView1); 

     progressBar = (ProgressBar) findViewById(R.id.progressBar1); 

     button = (Button)findViewById(R.id.button) ; 

     recyclerView.setHasFixedSize(true); 

     recyclerViewlayoutManager = new LinearLayoutManager(this); 

     recyclerView.setLayoutManager(recyclerViewlayoutManager); 

     final Intent intent = getIntent(); 

     final int id = intent.getIntExtra("user_id", -1); 




     /* button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       progressBar.setVisibility(View.VISIBLE); 

       JSON_DATA_WEB_CALL(); 

      } 
     });*/ 
     JSON_DATA_WEB_CALL(); 

    } 

    public void JSON_DATA_WEB_CALL(){ 

     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL, 

       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 

         progressBar.setVisibility(View.GONE); 


         JSON_PARSE_DATA_AFTER_WEBCALL(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       }); 

     requestQueue = Volley.newRequestQueue(this); 

     requestQueue.add(jsonArrayRequest); 
    } 

    public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){ 

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

      GetDataAdapter GetDataAdapter2 = new GetDataAdapter(); 

      JSONObject json = null; 
      try { 
       json = array.getJSONObject(i); 

       GetDataAdapter2.setId(json.getInt(JSON_ID)); 

       GetDataAdapter2.setName(json.getString(JSON_NAME)); 

       GetDataAdapter2.setSubject(json.getString(JSON_SUBJECT)); 

       GetDataAdapter2.setPhone_number(json.getString(JSON_PHONE_NUMBER)); 

      } catch (JSONException e) { 

       e.printStackTrace(); 
      } 
      GetDataAdapter1.add(GetDataAdapter2); 
     } 

     recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this); 

     recyclerView.setAdapter(recyclerViewadapter); 
    } 
} 

:あなたは私のPHPファイルを参照してくださいと私はJsonArrayRequestを呼んでいる私のクラスができ :

PHP

<?php 
include 'dbconfig.php'; 
// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$user_id = $_POST["user_id"]; // this is what Im trying to fix 
$sql = "SELECT * FROM plans WHERE user_id=?"; // and pass the information in ? 
$result = $conn->query($sql); 

if ($result->num_rows >0) { 
// output data of each row 
    while($row[] = $result->fetch_assoc()) { 
     $tem = $row; 
     $json = json_encode($tem); 
    } 
} else { 
    echo "0 results"; 
} 
echo $json; 
$conn->close(); 
?> 

Javaクラス異なる。アンドロイドスタジオとPHPの新機能 私は誰かが私を助けてくれることを願っています。私は今2週間それをやろうとしています。

答えて

0

をパラメータを送信することができます:あなたがPOSTに合格することができますgetParams()方法と

public class MyJsonArrayRequest extends JsonArrayRequest { 

    private Map<String, String> mPostParams; 

    @Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     return mPostParams; 
    } 

    public MyJsonArrayRequest(String url, Map<String, String> postParams, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) { 
     super(url, listener, errorListener); 

     this.mPostParams = postParams; 
    } 
} 

をパラメーター。

Map<String, String> params = new HashMap<>(); 
params.put("ID", id); 
params.put("USER_ID", userId); 
MyJsonArrayRequest jsonArrayRequest = new MyJsonArrayRequest(GET_JSON_DATA_HTTP_URL, params, 

    new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 

      progressBar.setVisibility(View.GONE); 


      JSON_PARSE_DATA_AFTER_WEBCALL(response); 
     } 
    }, 
    new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 

もう1つの方法は、URLのGETリクエストを介してパラメータを渡すことです。

+0

大丈夫なので、この新しいクラスを拡張で作成しました。 –

+0

それでは、getParams()メソッドでこの部分に可変部分を追加する場所は –

+0

なので、キー "ID"を持つHas​​hMapを返し、int値を評価する必要があります。 php apiで$ _POST ["ID"]で読むことができます – mcatta

0

あなたはこのようなカスタム要求にJsonArrayRequestを拡張する必要がありますオーバーライドgetParam法により、このようjsonArrayRequestで

JsonArrayRequest request = new JsonArrayRequest(method, url, null, responseListener, errorListener) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<>(); 
      try { 

       params.put("paramOne", "hello"); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return params; 
     } 
    }; 
    addToRequestQueue(request); 
+0

どうすればよいですか?私の問題を理解しましたか? –

+0

あなたはjsonarrayリクエストで任意のパラメータを追加することはできないと言っています(要求を送信するときに、リクエストで情報を送信したい場合)。 –

+0

ええ、私のコードは違う –

0

@mcatta

私は他人のacticityに行ったように何かをしたい:

ProfileRequest profilRequest = new ProfileRequest(id, responseListener); 
       RequestQueue queue = Volley.newRequestQueue(UserAreaActivity.this); 
       queue.add(profilRequest); 

public class ProfileRequest extends StringRequest { 

     private static final String PROFIL_REQUEST_URL = "http://travelb.000webhostapp.com/Profil.php "; 
     private Map<String, String> params; 

     public ProfileRequest(int user_id, Response.Listener<String> listener){ 
      super(Request.Method.POST, PROFIL_REQUEST_URL, listener, null); 
      params= new HashMap<>(); 
      params.put("user_id", user_id+""); 
     } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 
} 

のでprofilerequestのidが最終int型の変数です。 これは簡単でした。 まだjsonarrayrequestと混同しています

0

それは長い時間でしたが、 誰かが役に立ちます と次のコードが動作します。

public class Activity extends AppCompatActivity { 

    List<GetDataAdapter> GetDataAdapter1; 
    RecyclerView recyclerView; 
    RecyclerView.LayoutManager recyclerViewlayoutManager; 
    RecyclerView.Adapter recyclerViewadapter; 
    ProgressBar progressBar; 
    String GET_JSON_DATA_HTTP_URL = "API here"; 
    //String JSON_ID = "id"; 
    //we have intilize here with json names and database column name also should be kept here 
    String JSON_FNAME = "contact_fname"; 
    String JSON_LNAME = "contact_lname"; 

    RequestQueue requestQueue ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_booking); 
     GetDataAdapter1 = new ArrayList<>(); 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerView1); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
     recyclerView.setHasFixedSize(true); 
     recyclerViewlayoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(recyclerViewlayoutManager); 
     //json web call from web 
     JSON_DATA_WEB_CALL(); 
    } 

    public void JSON_DATA_WEB_CALL(){ 
     String uid ="value"//Or you can use your value to pass 

     StringRequest strrequest = new StringRequest(Request.Method.POST,GET_JSON_DATA_HTTP_URL, 

       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 

         progressBar.setVisibility(View.GONE); 
         try { 
          JSON_PARSE_DATA_AFTER_WEBCALL(response); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       }){ 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<>(); 
       params.put("userid", uid);//userid to send to php 
       return params; 
      } 
     }; 

     requestQueue = Volley.newRequestQueue(this); 

     requestQueue.add(strrequest); 
    } 

    public void JSON_PARSE_DATA_AFTER_WEBCALL(String array) throws JSONException { 

     JSONArray jarr = new JSONArray(array); 
     for(int i = 0; i<jarr.length(); i++) { 
      GetDataAdapter GetDataAdapter2 = new GetDataAdapter();//adapter class 
      //JSONObject json; 
      try { 
       JSONObject json = jarr.getJSONObject(i); 
      // JSONObject json = (JSONObject) array.get(String.valueOf(i)); 

       //set and get methods should declare here with database colmun names and json names 
       GetDataAdapter2.setcontact_fname(json.getString(JSON_FNAME)); 
       GetDataAdapter2.setcontact_lname(json.getString(JSON_LNAME)); 

      } catch (JSONException e) { 

       e.printStackTrace(); 
      } 
      GetDataAdapter1.add(GetDataAdapter2); 

     } 

     recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this); 
     recyclerView.setAdapter(recyclerViewadapter); 
    } 
} 
関連する問題