java - 根据用户名在android上检索json数据

标签 java php android mysql json

我是 Android 编程新手,现在我在尝试根据登录应用程序的用户名从 mysql phpmyadmin 检索数据时遇到问题。我有一个名为 booking 的表,其中包含所有用户的详细信息。现在我想从数据库中检索某一特定用户的所有详细信息。我怎么做?

bookinglist.java

public class bookinglist extends ArrayAdapter<String> {
private String[] sportcenter_name;
private static String[] facility_name;
private static String[] date;
private static String[] start_time;
private static String[] end_time;
private Activity context;

public bookinglist(Activity context, String[] sportcenter_name, String[] facility_name, String[] date, String[] start_time, String[] end_time) {
    super(context, R.layout.list_item, sportcenter_name);
    this.context = context;
    this.sportcenter_name = sportcenter_name;
    this.facility_name = facility_name;
    this.date = date;
    this.start_time = start_time;
    this.end_time = end_time;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View listViewItem = inflater.inflate(R.layout.list_booking, null, true);
    TextView textViewspname = (TextView) listViewItem.findViewById(R.id.textViewspname);
    TextView textViewFacility = (TextView) listViewItem.findViewById(R.id.textViewFacility);
    TextView textViewdate = (TextView) listViewItem.findViewById(R.id.textViewdate);
    TextView textViewstarttime = (TextView) listViewItem.findViewById(R.id.textViewstarttime);
    TextView textViewendtime = (TextView) listViewItem.findViewById(R.id.textViewendtime);

    textViewspname.setText(sportcenter_name[position]);
    textViewFacility.setText(facility_name[position]);
    textViewdate.setText(date[position]);
    textViewstarttime.setText(start_time[position]);
    textViewendtime.setText(end_time[position]);

    return listViewItem;
}
}

bookiglistJSON.java

public class bookinglistJSON {
public static String[] sportcenter_name;
public static String[] facility_name;
public static String[] date;
public static String[] start_time;
public static String[] end_time;

public static final String JSON_ARRAY = "result";
public static final String KEY_Sportcenter = "sportcenter_name";
public static final String KEY_Facility = "facility_name";
public static final String KEY_Date = "date";
public static final String KEY_Starttime = "start_time";
public static final String KEY_Endtime = "end_time";
private JSONArray booking = null;
private String json;

public bookinglistJSON(String json){
    this.json = json;
}

protected void bookinglistJSON(){
    JSONObject jsonObject=null;
    try {
        jsonObject = new JSONObject(json);
        booking = jsonObject.getJSONArray(JSON_ARRAY);
        sportcenter_name = new String[booking.length()];
        facility_name = new String[booking.length()];
        date = new String[booking.length()];
        start_time = new String[booking.length()];
        end_time = new String[booking.length()];

        for(int i=0;i<booking.length();i++){
            JSONObject jo = booking.getJSONObject(i);
            sportcenter_name[i] = jo.getString(KEY_Sportcenter);
            facility_name[i] = jo.getString(KEY_Facility);
            date[i] = jo.getString(KEY_Date);
            start_time[i] = jo.getString(KEY_Starttime);
            end_time[i] = jo.getString(KEY_Endtime);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
}

ViewBookings.java

public class ViewBookings extends AppCompatActivity {
public static final String JSON_URL = "http://www.khaledz.com/projects/project/viewbooking.php?username=";
public static final String KEY_USERNAME="username";
private TextView textView;
private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view_booking);
    textView = (TextView) findViewById(R.id.textViewUserName);

    //Fetching email from shared preferences
    SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
    String username = sharedPreferences.getString(Config.EMAIL_SHARED_PREF, "Not Available");

    //Showing the current logged in email to textview
    textView.setText("Current User: " + username);
    listView = (ListView) findViewById(R.id.listViewBooking);
    sendRequest();
}

private void sendRequest(){
    final String username = textView.getText().toString().trim();
    StringRequest stringRequest = new StringRequest(JSON_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    showJSON(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(ViewBookings.this, error.getMessage(), Toast.LENGTH_LONG).show();
                }
            }){
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> map = new HashMap<String, String>();
        map.put(KEY_USERNAME, username);
        return map;
    }
    };
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}

private void showJSON(String json){
    bookinglistJSON pj = new bookinglistJSON(json);
    pj.bookinglistJSON();
    bookinglist nl = new bookinglist(ViewBookings.this, bookinglistJSON.sportcenter_name,bookinglistJSON.facility_name,bookinglistJSON.date,bookinglistJSON.start_time,bookinglistJSON.end_time);
    listView.setAdapter(nl);
}
}

php 脚本。

<?php
define('HOST','alahlitimercom.ipagemysql.com');
define('USER','book_play_123');
define('PASS','book_play_123');
define('DB','book_play_123');

$con = mysqli_connect(HOST,USER,PASS,DB);
$username = $_GET['username'];
$sql = "select * from booking WHERE username='$username'";
$res = mysqli_query($con,$sql);

$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,
array('id'=>$row[0],
'sportcenter_name'=>$row[1],
'facility_name'=>$row[2],
'username'=>$row[3],
'created_at'=>$row[4],
'date'=>$row[5],
'start_time'=>$row[6],
'end_time'=>$row[7],
'court'=>$row[8],
'price'=>$row[9]
));
}

echo json_encode(array("result"=>$result));

mysqli_close($con);

?>

最佳答案

http://afzaln.com/volley/com/android/volley/toolbox/StringRequest.html

指定默认请求为GET

但是在你编写的 php 代码中

$username = $_POST['username'];

您应该将用户名添加为 URL 参数,使其成为 GET 参数,如下所示:

http://www.khaledz.com/projects/project/viewbooking.php?username=Harry

在 PHP 中你可以这样写:

$username = $_GET['username'];

关于java - 根据用户名在android上检索json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34895070/

相关文章:

android - 适用于移动设备或特定于移动设备的 Web 应用程序

java - 使用扫描仪将字符串存储在数组中

java - Jackson 中的 ObjectNode 和 JsonNode 有什么区别?

java - 如何使用 Java 从 Excel (XLSX) 构建 XML

php - 保护可下载文件的最佳策略-php/mysql Apache2 服务器

javascript - 单击按钮后的 jQuery POST 不起作用

android - 改造 api 分解

java - 以编程方式将复杂的 Excel 文件转换为 HTML 格式

php - Facebook 登录(JavaScript)突然停止工作

Android Chromecast 配套库 - 字幕切换按钮