如何从MySQL数据库中检索特定用户数据并在listview中显示?

时间:2017-04-29 17:08:25

标签: php android mysql

我正在开发食堂自动化系统的Android应用程序。我想显示用户放置的所有订单以及我已存储在订单表中的订单。现在的问题是我不知道如何从MySQL检索数据并在列表视图中显示该特定用户订单历史数据。

这是我的最后一年项目。

import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


public class OrderScreen extends AppCompatActivity implements View.OnClickListener {

    private EditText editTextId;
    private Button buttonGet;
    private TextView textViewResult;
    private ProgressDialog loading;
    String result = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order_screen);
        SharedPreferences sp = getSharedPreferences("login", 0);
        String user_id = sp.getString("userid", null);
        editTextId = (EditText) findViewById(R.id.editTextId);
        editTextId.setText(user_id);
        buttonGet = (Button) findViewById(R.id.buttonGet);


        buttonGet.setOnClickListener(this);

    }

    List<Map<String, String>> countryList = new ArrayList<Map<String, String>>();

    private void getData() {
        String id = editTextId.getText().toString().trim();
        if (id.equals("")) {
            Toast.makeText(this, "Please enter an id", Toast.LENGTH_LONG).show();
            return;
        }
        loading = ProgressDialog.show(this, "Please wait...", "Fetching...", false, false);

        String url = Config.DATA_URL + editTextId.getText().toString().trim();

        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                loading.dismiss();
                showJSON(response);
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(OrderScreen.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

    private void showJSON(String response) {
        String name = "";


        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray result = jsonObject.getJSONArray(Config.JSON_ARRAY);

            for(int i=0; i<result.length(); i++) {
                JSONObject collegeData = result.getJSONObject(i);
                String[] values = new String[]{collegeData.getString(Config.KEY_NAME)};

                // address = collegeData.getString(Config.KEY_ADDRESS);
                //   vc = collegeData.getString(Config.KEY_VC);


                ListView listView = (ListView) findViewById(R.id.listview);

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, android.R.id.text1, values);
                listView.setAdapter(adapter);
            }
        }



        catch (JSONException e) {
            e.printStackTrace();

        }

    }

        @Override
        public void onClick(View v) {
            getData();
        }
    }

1 个答案:

答案 0 :(得分:1)

您需要在PHP中编写后端API。请考虑以下事项:

  • Android应用需要向该系统发送HTTP消息以读取或写入数据。
  • 来自应用程序的每条消息都必须包含证明该应用程序有权读取或写入数据的凭据。
  • 如果安全性对您很重要,则应该通过HTTPS运行API,以便第三方拦截凭据更加困难。
  • API通常使用JSON进行数据输入和输出,但XML也很好。
  • 如果您想阅读用户下达的订单,则可以使用以下格式:

    GET /orders?user=<user>&password=<password>
    

    如果您将凭据放在这样的查询字符串中,使用HTTPS很重要,不过我认为研究项目并不重要。

  • 然后,您的API应该针对数据库运行一段SQL来读取订单,例如:

    SELECT * FROM order
    INNER JOIN food_item_order ON (order.id = food_item_order.order_id)
    INNER JOIN food_item ON (food_item_order.food_item_id = food_item.id)
    WHERE order.user_id = ?
    

    我在这里隐含了一个四表数据库,上面的三个项目形成了多对多的关系。