簡體   English   中英

將一個參數傳遞給服務器並使用帶有凌空android studio的JsonArrayRequest獲取數組

[英]passing one param to server and get array using JsonArrayRequest with volley android studio

我正在嘗試制作一個應用程序。 我在數據庫中努力獲取其中一個表的一些數據。 我知道如何從表格中獲取所有內容,但現在只需要該表格的幾行。 所以我必須傳遞一個ID。 問題是我無法在JsonArrayRequest添加任何參數。 您可以在調用JsonArrayRequest地方看到我的php文件和類:

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類:

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);
    }
}

我讀了很多東西,但都不同。 我是androidstudio和php上的新手。 我希望有人可以幫助我,因為我現在已經嘗試了2個星期。

您可以通過重寫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);

您應該像這樣在自定義請求中擴展JsonArrayRequest:

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; 
    }
}

使用getParams()方法,您將能夠傳遞POST參數。

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) {

        }
    });

另一種方法是通過URL中的GET請求傳遞參數。

@mcatta

我想做一些像其他人一樣的事情:

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混淆

它已經存在了很長時間,但是有人可以找到它,並且以下代碼可以正常工作。

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);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM