2013-04-18 48 views
0

我使用eclipse編寫android應用程序和php網站。在AndroidShowEvent網頁的編碼:在PHP中,如何從android獲取ID發送

<?php 
    $dbhost = ''; //due to security problem, it will not show 
    $dbuser = ''; //due to security problem, it will not show 
    $dbpass = ''; //due to security problem, it will not show 
    mysql_select_db('u507295856_ems'); 
    mysql_query("SET NAMES 'utf8'"); 
    $sql=mysql_query("select * from event where Event_ID = '".$_REQUEST['eid']."'"); 
    while($row=mysql_fetch_assoc($sql)) 
     $output[]=$row; 
     $JSON = json_encode($output); 
     print ($JSON); 
    mysql_close(); 
    ?> 

的AndroidEvent網頁的編碼:

<?php 
    $dbhost = ''; //due to security problem, it will not show 
    $dbuser = ''; //due to security problem, it will not show 
    $dbpass = ''; //due to security problem, it will not show 
    $conn = mysql_connect($dbhost,$dbuser,$dbpass); 
    mysql_select_db('u507295856_ems'); 
    mysql_query("SET NAMES 'utf8'"); 
    $sql=mysql_query("select * from event order by Event_StartDate DESC"); 
    while($row=mysql_fetch_assoc($sql)) 
     $output[]=$row; 
     $JSON = json_encode($output); 
     print ($JSON); 
    mysql_close(); 
    ?> 

在Android應用程序,它有一個頁面是使用ListView控件來顯示事件名稱。這個活動名稱是Activity_List。在這個可以在ListView中顯示事件名稱的Activity_List類中。在Activity_List的編碼:

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

    setTitle("EMS"); 

    tvBack = (TextView) findViewById(R.id.tvBack); 
    tvEng = (TextView) findViewById(R.id.tvEng); 
    tvCh = (TextView) findViewById(R.id.tvCh); 
    lstActivity = (ListView) findViewById(R.id.lstActivity); 

    tvBack.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(Activity_List.this, EMSActivity.class); 
      startActivity(i); 
     } 
    }); 

    tvCh.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(Activity_List.this, Activity_List.class); 
      startActivity(i); 
     } 
    }); 

    loadJSONFromWebAsync(); 
} 

public void loadJSONFromWebAsync() { 
    Thread t = new Thread() { 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

     // http post 
     @Override 
     public void run() { 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(
         "http://www.ems.cixx6.com/AndroidEvent.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 

       // convert response to string 
       try { 
        BufferedReader reader = new BufferedReader(
          new InputStreamReader(is, "utf-8"), 8); 
        sb = new StringBuilder(); 
        sb.append(reader.readLine() + "\n"); 
        String line = "0"; 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
        is.close(); 
        result = sb.toString(); 
       } catch (Exception e) { 
        Toast.makeText(getBaseContext(), "change information losed", 
          Toast.LENGTH_LONG).show(); 
       } 

       Activity_List.this.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         Activity_List.this.parseJSONAndRefreshListView(); 
        } 
       }); 
      } catch (Exception e) { 
       Toast.makeText(getBaseContext(), "please check internet connection", 
         Toast.LENGTH_LONG).show(); 
      } 
     } 
    }; 
    t.run(); 
} 

public void parseJSONAndRefreshListView() { 
    // paring data 
    try { 
     jArray = new JSONArray(result); 
     JSONObject json_data = null; 

     for (int i = 0; i < jArray.length(); i++) { 
      json_data = jArray.getJSONObject(i); 
      int EventID = json_data.getInt("Event_ID"); 
      String event_Name = json_data.getString("Event_Name"); 
      myList.add(event_Name); 
      myEventIDList.add("" + EventID); 
     } 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, myList); 
     lstActivity.setAdapter(adapter); 

     lstActivity.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       Intent i = new Intent(Activity_List.this, 
         Activity_Detail.class); 
       int selectedID = Integer.parseInt(myEventIDList.get(arg2)); 
       Log.i("test", Integer.toString(selectedID)); 
       i.putExtra("ID", selectedID); 

       startActivity(i); 
      } 
     }); 

    } catch (JSONException e1) { 
     e1.printStackTrace(); 
     Toast.makeText(getBaseContext(), "can not find information", Toast.LENGTH_LONG) 
       .show(); 
    } catch (ParseException e1) { 
     e1.printStackTrace(); 
    } 
} 

當用戶點擊的事件之一,它會去Activity_Detail類觀看事件的詳細信息。我想發送選定的事件ID到AndroidShowEvent PHP頁面。之後,它連接到數據庫以選擇在Activity_Detail類中顯示數據的符合事件ID記錄。 Activity_Detail頁面使用textView來顯示數據。 編碼Activity_Detail的:

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

    setTitle("EMS"); 

    tvBack = (TextView) findViewById(R.id.tvBack); 
    tvEng = (TextView) findViewById(R.id.tvEng); 
    tvCh = (TextView) findViewById(R.id.tvCh); 
    tvEventName = (TextView) findViewById(R.id.tvEventName); 
    tvEventLocationID = (TextView) findViewById(R.id.tvEventLocation); 
    tvEventDate = (TextView) findViewById(R.id.tvEventDate); 
    tvEventTime = (TextView) findViewById(R.id.tvEventTime); 
    tvEventPhone = (TextView) findViewById(R.id.tvEventPhone); 
    tvSpeakerName = (TextView) findViewById(R.id.tvSpeakerName); 
    tvEventContent = (TextView) findViewById(R.id.tvEventContent); 
    imgEventBanner = (ImageView) findViewById(R.id.imgEventBanner); 
    BtnFacebook = (Button) findViewById(R.id.BtnFacebook); 
    BtnTwitter = (Button) findViewById(R.id.BtnTwitter); 

    tvEventLocationID.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(Activity_Detail.this, PlaceMap.class); 
      startActivity(i); 
     } 
    }); 

    tvSpeakerName.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(Activity_Detail.this, Speaker.class); 
      startActivity(i); 
     } 
    }); 

    BtnFacebook.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     } 
    }); 

    BtnTwitter.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     } 
    }); 

    tvBack.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(Activity_Detail.this, EMSActivity.class); 
      startActivity(i); 
     } 
    }); 

    tvCh.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(Activity_Detail.this, 
        Activity_Detail.class); 
      startActivity(i); 
     } 
    }); 

    EventID = this.getIntent().getIntExtra("ID", 0); 

    String event = Integer.toString(EventID); 
    Log.i("test", event); 

    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("eid", event)); 
    Log.i("test",String.valueOf(params)); 
    loadJSONFromWebAsync(params); 
} 

public void loadJSONFromWebAsync(List<NameValuePair> pair) { 
    final List<NameValuePair> _pair = pair; 
    Thread t = new Thread() { 
     //ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

     // http post 
     @Override 
     public void run() { 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(
         "http://www.ems.cixx6.com/AndroidShowEvent.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(_pair)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 

       // convert response to string 
       try { 
        BufferedReader reader = new BufferedReader(
          new InputStreamReader(is, "utf-8"), 8); 
        sb = new StringBuilder(); 
        sb.append(reader.readLine() + "\n"); 
        String line = "0"; 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
        is.close(); 
        result = sb.toString(); 
       } catch (Exception e) { 
        Toast.makeText(getBaseContext(), "change information losed", 
          Toast.LENGTH_LONG).show(); 
       } 

       Activity_Detail.this.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         Activity_Detail.this.parseJSONAndRefreshListView(); 
        } 
       }); 
      } catch (Exception e) { 
       Toast.makeText(getBaseContext(), "please check Internet connection", 
         Toast.LENGTH_LONG).show(); 
      } 
     } 
    }; 
    t.run(); 
} 

public void parseJSONAndRefreshListView() { 
    // paring data 
    try { 
     jArray = new JSONArray(result); 
     JSONObject json_data = null; 
     for (int i = 0; i < jArray.length(); i++) { 
      json_data = jArray.getJSONObject(i); 
      String Event_Name = json_data.getString("Event_Name"); 
      String Event_Location = json_data.getString("Event_Location"); 
      String Event_StartTime = json_data.getString("Event_StartTime"); 
      String Event_EndTime = json_data.getString("Event_EndTime"); 
      String Event_Phone = json_data.getString("Event_Phone"); 
      String Event_StartDate = json_data.getString("Event_StartDate"); 
      String Event_EndDate = json_data.getString("Event_EndDate"); 
      String Event_Description = json_data 
        .getString("Event_Description"); 
      String Event_Description2 = Event_Description.replace("<br>", 
        "\n"); 
      String Event_Image = json_data.getString("Event_Image"); 
      String Speaker_Name = json_data.getString("Speaker_Name"); 

      tvEventName.setText(Event_Name); 
      tvEventDate.setText(Event_StartDate + " 至 " + Event_EndDate); 
      tvEventTime.setText(Event_StartTime + " 至 " + Event_EndTime); 
      tvEventPhone.setText(Event_Phone); 
      tvEventContent.setText(Event_Description2); 

      SpannableString contentUnderline = new SpannableString(
        Event_Location); 
      contentUnderline.setSpan(new UnderlineSpan(), 0, 
        contentUnderline.length(), 0); 
      tvEventLocationID.setText(contentUnderline); 

      SpannableString contentUnderline2 = new SpannableString(
        Speaker_Name); 
      contentUnderline2.setSpan(new UnderlineSpan(), 0, 
        contentUnderline2.length(), 0); 
      tvSpeakerName.setText(contentUnderline2); 

      Bitmap bitmap = DownloadImage("http://www.ems.cixx6.com/" 
        + Event_Image); 
      imgEventBanner.setImageBitmap(bitmap); 
     } 
    } catch (JSONException e1) { 
     e1.printStackTrace(); 
     Toast.makeText(getBaseContext(), "can not find information", Toast.LENGTH_LONG) 
       .show(); 
    } catch (ParseException e1) { 
     e1.printStackTrace(); 
    } 
} 

private InputStream OpenHttpConnection(String urlString) throws IOException { 
    InputStream in = null; 
    int response = -1; 

    URL url = new URL(urlString); 
    URLConnection conn = url.openConnection(); 

    if (!(conn instanceof HttpURLConnection)) 
     Toast.makeText(getBaseContext(), "please check Internet connection", Toast.LENGTH_LONG) 
       .show(); 
    try { 
     HttpURLConnection httpConn = (HttpURLConnection) conn; 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setInstanceFollowRedirects(true); 
     httpConn.setRequestMethod("GET"); 
     httpConn.connect(); 

     response = httpConn.getResponseCode(); 
     if (response == HttpURLConnection.HTTP_OK) { 
      in = httpConn.getInputStream(); 
     } 
    } catch (Exception ex) { 
     Toast.makeText(getBaseContext(), "Internet connection was losed", Toast.LENGTH_LONG) 
       .show(); 
    } 
    return in; 
} 

private Bitmap DownloadImage(String URL) { 
    Bitmap bitmap = null; 
    InputStream in = null; 
    try { 
     in = OpenHttpConnection(URL); 
     bitmap = BitmapFactory.decodeStream(in); 
     in.close(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    return bitmap; 
} 

結果。只顯示吐司。消息是「無法找到信息」。其他數據沒有顯示。

我的目的是在Activity_Detail類中顯示合適的事件數據。我應該如何修改代碼?

這個問題讓我很煩惱,請幫助我!

回答

-1

可能是發送請求或解析json的問題。

你可以通過使用e1.printStackTrace()來發布錯誤信息:

+0

這不是一個答案。改用意見 –

+0

對不起。我是這個新的stackoverflow,並沒有用過這麼多。我沒有看到添加評論以添加評論您的問題。 – Saravanakumar

0

錯誤消息,通過使用e1.printStackTrace(); < - 由於我的聲望還不夠,所以我不能發佈圖片的錯誤信息。

但我的PHP編碼沒有錯誤?

因爲我懷疑AndriodShowEvent php頁面無法在android中獲取選定的事件ID,因此它無法在Activity_Detail頁面中顯示詳細信息。