如何使用上一个listview中的两个id从远程数据库中选择数据

时间:2014-02-14 16:00:00

标签: java php android listview android-listview

我目前正在制作一个多级列表视图,我已经处于第三级...第一个和第二个顺利进行但应用程序在第三级崩溃..

以下是我正在做的事情的准确说明(数据除外)
http://www.androidhive.info/2012/10/android-multilevel-listview-tutorial/
我用它作为参考,唯一的区别是我没有从数组列表中获取数据而是使用远程数据库..

multilevel listview

这就是logcat崩溃时显示的内容..

{"success":0,"message":"No available patient's record"}
org.json.JSONException: No value for date

这是我的询问..

$query = "SELECT * FROM remarks WHERE patient_id = :patient_id";
$query_params = array(':patient_id' => $_GET["patient_id"]);

try{
    $stmt = $dbname->prepare($query);
    $result = $stmt->execute($query_params);    

    $query = "SELECT * FROM remarks WHERE remarks_id = :remarks_id";
    $query_params = array(':remarks_id' => $_GET["remarks_id"]);

    $q = $dbname->prepare($query); 
    $r = $q->execute($query_params);


}catch(PDOException $ex){
        $response["success"] = 0;
        $response["message"] = $ex;

        die(json_encode($response));
}

$rows = $stmt->fetchAll();

if($rows){

        $post               = array();
        $post["date"]       = $rows["date"];
        $post["diagnosis"]  = $rows["diagnosis"];
        $post["medication"] = $rows["medication"];
        $post["description"]= $rows["description"];

        echo json_encode($post);
}
else{
    $response["success"] = 0;
    $response["message"] = "No available patient's record";

    die(json_encode($response));

}

这是我的第三级课。

private ProgressDialog pDialog;

JSONParser jsonParser = new JSONParser();
JSONArray history = null;

String patient_id = null;
String remarks_id = null;

String date, diagnosis, medication, description;
private static final String SINGLE_HISTORY = "http://192.168.43.15:8080/DoctorScheduler/activities/singlehistory.php";

//json node
private static final String TAG_DATE        = "date";
private static final String TAG_DIAGNOSIS   = "diagnosis";
private static final String TAG_MEDICATION  = "medication";
private static final String TAG_DESC        = "description";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_singlehistory);

    Intent i = getIntent();
    patient_id = i.getStringExtra("patient_id");
    remarks_id = i.getStringExtra("remarks_id");

    new LoadSingleHistory().execute();
}

class LoadSingleHistory extends AsyncTask<String, String, String>{

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        pDialog = new ProgressDialog(Singlehistory.this);
        pDialog.setMessage("Loading patient information ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        List<NameValuePair> params = new ArrayList<NameValuePair>();

        // post patient id, remarks id as GET parameters
        params.add(new BasicNameValuePair("patient_id", patient_id));
        params.add(new BasicNameValuePair("remarks_id", remarks_id));

        // getting JSON string from URL
        String json = jsonParser.getJSONFromURL(SINGLE_HISTORY, "GET", params);

        // Check your log cat for JSON response
        Log.d("Single History JSON: ", json);

        try {
            JSONObject jObj = new JSONObject(json);
            if(jObj != null){

                date = jObj.getString(TAG_DATE);
                diagnosis = jObj.getString(TAG_DIAGNOSIS);
                medication = jObj.getString(TAG_MEDICATION);                    
                description = jObj.getString(TAG_DESC);
            }           

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

        return null;

    }

    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        pDialog.dismiss();

        TextView Date        = (TextView) findViewById(R.id.txtDate);
        TextView Diagnosis   = (TextView) findViewById(R.id.txtDiagnosis);
        TextView Medication  = (TextView) findViewById(R.id.txtMedication);
        TextView Description = (TextView) findViewById(R.id.txtDescription);

        Date.setText(date);
        Diagnosis.setText(diagnosis);
        Medication.setText(medication);
        Description.setText(description);

        setTitle(TAG_DESC);

    }   
}

我不知道错误在哪里,如果它在我的java或我如何查询它。 非常感谢你提前!

1 个答案:

答案 0 :(得分:0)

我刚刚发现错误来自之前的listview,未能传递id的正确值...我只是做了一些修改..所以这里是答案:) *如果万一有人需要一个从远程数据库填充的多级列表视图..

多层次LISTVIEW的第二级

public class History extends ListActivity{

private Button create, back;
private ProgressDialog pDialog;
private static final String READ_HISTORY_URL = "http://192.168.43.15:8080/DoctorScheduler/activities/history.php";

private static final String TAG_POST    = "post";
private static final String TAG_DATE    = "date";
private static final String TAG_DESC    = "description";
private static final String TAG_ID      = "remarks_id";

JSONParser jsonParser = new JSONParser();
JSONArray history = null;

String patient_id;
ArrayList<HashMap<String, String>> historyList;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_history);

    //get patient_id
    Intent i = getIntent();
    patient_id = i.getStringExtra("id");

    //hashmap for history listview
    historyList = new ArrayList<HashMap<String, String>>();

    new LoadHistory().execute();

    ListView lv = getListView();
    lv.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // TODO Auto-generated method stub
            // INSERT ALL PREVIOUS CONSULTATIONS OF THE PATIENT HERE
            Intent viewhistory = new Intent(History.this, Singlehistory.class);

            String pid = ((TextView) view.findViewById(R.id.txtPid)).getText().toString();
            String rid = ((TextView) view.findViewById(R.id.txtRid)).getText().toString();

            Toast.makeText(History.this, "patient_id: " + pid + ", remarks_id: " + rid, Toast.LENGTH_LONG).show();

            viewhistory.putExtra("patient_id", pid);
            viewhistory.putExtra("remarks_id", rid);

            startActivity(viewhistory);
        }
    });

    lv.setOnItemLongClickListener(new OnItemLongClickListener(){

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub

            Intent edithistory = new Intent(History.this, Edithistory.class);

            String patient_id = ((TextView) view.findViewById(R.id.txtPid)).getText().toString();
            String remarks_id = ((TextView) view.findViewById(R.id.txtRid)).getText().toString();

            Toast.makeText(History.this, "p_id: " + patient_id + "r_id: " + remarks_id, Toast.LENGTH_LONG).show();

            edithistory.putExtra("patient_id", patient_id);
            edithistory.putExtra("remarks_id", remarks_id);

            startActivity(edithistory);
            return true;
        }
    });

    create = (Button) findViewById(R.id.Addhistory);
    create.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i = new Intent(History.this, Addhistory.class);
            String id = ((TextView) v.findViewById(R.id.txtRid)).getText().toString();
            i.putExtra("id", id);
            startActivity(i);
        }
    });

    back = (Button) findViewById(R.id.BtnBack);
    back.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

}

public void nextScreen(){

    Intent i = new Intent(History.this, Addhistory.class);
    String id = ((TextView) findViewById(R.id.txtRid)).getText().toString();
    i.putExtra("id", id);
    startActivity(i);
}

class LoadHistory extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        pDialog = new ProgressDialog(History.this);
        pDialog.setMessage("Loading all patient consultations....");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show(); 

    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("patient_id", patient_id));

        String json = jsonParser.getJSONFromURL(READ_HISTORY_URL, "GET", params);

        Log.d("Response: ", json);

        try{
            JSONObject jObj = new JSONObject(json);

            if(jObj!=null){

                history = jObj.getJSONArray(TAG_POST);

                if(history != null){
                    //looping through all patient's remarks
                    for(int i=0; i<history.length(); i++){
                    JSONObject c = history.getJSONObject(i);

                        //storing into json variable

                        //String id = c.getString(TAG_ID);
                        String remarks_id = c.getString(TAG_ID);
                        String date = c.getString(TAG_DATE);
                        String description = c.getString(TAG_DESC);

                        //creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();
                        map.put("patient_id", patient_id);
                        map.put(TAG_ID, remarks_id);
                        map.put(TAG_DATE, date);
                        map.put(TAG_DESC, description);

                        historyList.add(map);
                    }
                }else{
                    Log.d("History:", "null");
                }
            }
        }catch(JSONException e){
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        //super.onPostExecute(result);
        pDialog.dismiss();

        ListAdapter adapter = new SimpleAdapter(
                History.this, historyList,  R.layout.mainhistory,
                new String[] {"patient_id", TAG_ID, TAG_DATE, TAG_DESC},
                new int[] {R.id.txtPid, R.id.txtRid, R.id.txtRdate, R.id.txtRdesc});

        setListAdapter(adapter);
    }
}

第三级列表

public class Singlehistory extends Activity {

private ProgressDialog pDialog;

JSONParser jsonParser = new JSONParser();
JSONArray history = null;

String patient_id = null;
String remarks_id = null;

String date, diagnosis, medication, description;
private static final String SINGLE_HISTORY = "http://192.168.43.15:8080/DoctorScheduler/activities/singlehistory.php";

//json node
private static final String TAG_DATE        = "date";
private static final String TAG_DIAGNOSIS   = "diagnosis";
private static final String TAG_MEDICATION  = "medication";
private static final String TAG_DESC        = "description";
private static final String TAG_POST        = "post";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_singlehistory);

    Intent i = getIntent();
    patient_id = i.getStringExtra("patient_id");
    remarks_id = i.getStringExtra("remarks_id");

    new LoadSingleHistory().execute();
}

class LoadSingleHistory extends AsyncTask<String, String, String>{

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        pDialog = new ProgressDialog(Singlehistory.this);
        pDialog.setMessage("Loading patient information ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        List<NameValuePair> params = new ArrayList<NameValuePair>();

        // post patient id, remarks id as GET parameters
        params.add(new BasicNameValuePair("patient_id", patient_id));
        params.add(new BasicNameValuePair("remarks_id", remarks_id));

        // getting JSON string from URL
        String json = jsonParser.getJSONFromURL(SINGLE_HISTORY, "GET", params);

        // Check your log cat for JSON response
        Log.d("Single History JSON: ", json);

        try {
            JSONObject jObj = new JSONObject(json);
            if(jObj != null){

                history = jObj.getJSONArray(TAG_POST);
                if(history != null){

                    for(int i=0; i<history.length(); i++){
                    JSONObject c = history.getJSONObject(i);

                    date = c.getString(TAG_DATE);
                    diagnosis = c.getString(TAG_DIAGNOSIS);
                    medication = c.getString(TAG_MEDICATION);                   
                    description = c.getString(TAG_DESC);

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

        return null;

    }

    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        pDialog.dismiss();

        TextView Date        = (TextView) findViewById(R.id.txtDate);
        TextView Diagnosis   = (TextView) findViewById(R.id.txtDiagnosis);
        TextView Medication  = (TextView) findViewById(R.id.txtMedication);
        TextView Description = (TextView) findViewById(R.id.txtDescription);

        Date.setText(date);
        Diagnosis.setText(diagnosis);
        Medication.setText(medication);
        Description.setText(description);

        setTitle(TAG_DESC);

    }   
}

如何获取第三级数据..

require ("../config.inc.php");

$query = "SELECT * FROM remarks WHERE patient_id = :patient_id";
$query_params = array(':patient_id' => $_GET["patient_id"]);

try{
    $stmt = $dbname->prepare($query);
    $result = $stmt->execute($query_params);    

    $query = "SELECT * FROM remarks WHERE remarks_id = :remarks_id";
    $query_params = array(':remarks_id' => $_GET["remarks_id"]);

    $q = $dbname->prepare($query); 
    $r = $q->execute($query_params);


}catch(PDOException $ex){
        $response["success"] = 0;
        $response["message"] = $ex;

        die(json_encode($response));
}

$rows = $stmt->fetchAll();

if($rows){
    $response["post"] = array();
    foreach($rows as $row){

        $post               = array();
        $post["date"]       = $row["date"];
        $post["diagnosis"]  = $row["diagnosis"];
        $post["medication"] = $row["medication"];
        $post["description"]= $row["description"];

        array_push($response["post"], $post);
        }

    echo json_encode($response);
}
else{
    $response["status"] = "FAIL";
    $response["success"] = 0;
    $response["message"] = "No available patient's record";

    die(json_encode($response));

}