2014-02-14 226 views
1

即時通訊目前工作的一個多級列表視圖一個遠程數據庫中選擇數據,我在第三級已經...第一個和第二個進展順利,但在第三個應用程序崩潰水平..如何從使用兩個ID從以前的列表視圖

下面是我在做什麼(除非數據)
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或我如何查詢。 非常感謝你提前!

回答

0

我剛剛發現的錯誤來自以前的列表視圖,未能通過IDS的正確價值觀..我只是做了一些修改..所以這裏是答案:) *如果萬一有人需要從遠程數據庫填充的多級列表視圖..

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

第三級LISTVIEW

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

}