2012-11-02 26 views
3

我已經看到了許多關於此問題的問題/教程,但它們都使用某種預製數據庫或使用JSON。如何從MySQL數據庫中獲取數據並在列表中查看列表

我已經在我的MySQL服務器上創建了一個數據庫和一個simlpe數據表,該服務器在我的開發機器上作爲服務單獨運行。

我想從該表中提取數據,並將其列入我的Andoird應用程序的ListView(MainActivity)啓動時(onCreate)。

目前我正在使用預製汽車名稱列表。

汽車表(在mydb的數據庫)

idnamemodelyearvinkmprice

MainActivity.java

package com.example.myfirstproject; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 

public class MainActivity extends Activity implements OnItemClickListener { 

    protected String[] cars = {"BMW", "Audi", "VW", "Ford", "Subaru"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, cars); 
     ListView carsList = (ListView) findViewById(R.id.listCars); 
     carsList.setAdapter(adapter); 
     ListView list = (ListView) findViewById(R.id.listCars); 
     list.setOnItemClickListener(this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Intent intent = new Intent(this, DetailsActivity.class); 
     startActivity(intent); 
    } 
} 
+1

那麼,你必須將數據從數據庫服務器轉移到你的Android設備。不幸的是,最好的選擇是JSON和數據庫的REST接口。 – zapl

+1

你必須創建一個web服務,它將從mysql返回數據給你。你可以閱讀[this](http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/8339-connect-android-mysql-database-tutorial.html)教程。我試過使用mysql連接器,但它不適用於android。 –

+1

服務器端,使用JSON。然後我的建議是使用'AsyncTask'請參閱[示例這裏](http://stackoverflow.com/a/13197506/1134705)。我就是這麼做的 – jnthnjns

回答

3

我不願意張貼這個答案由於所有的間隙我會使用過時的PHP/MySQL的功能,但這裏的雲:

服務器端(僅供參考,看看MySQLi or PDO_MySQLmysql_connect不鼓勵):

if ($_GET["selectedCompany"] == "true" && $_GET['companyName']) { 

    $query = "Your query here"; 

    mysql_connect($dbserver, $dbusername, $dbpassword) or die(mysql_error()); 
    mysql_select_db($dbname) or die(mysql_error()); 

    $result = mysql_query($query) or die(mysql_error()); 
    $num = mysql_numrows($result); 
    $row = mysql_fetch_assoc($result); 

    $i = 0; 
    $rows = array(); 
    while ($i < $num) { 

     $survey_lat['survey_lat'] = mysql_result($result, $i, "survey_lat"); 
     $survey_lng['survey_lng'] = mysql_result($result, $i, "survey_lng"); 
     $thumbnail = mysql_result($result, $i, "thumbnail"); 
     $finalImg['thumbnail'] = base64_encode($thumbnail); 
     $sign_type['sign_type'] = mysql_result($result, $i, "sign_type"); 
     $object_lat['object_lat'] = mysql_result($result, $i, "object_lat"); 
     $object_lng['object_lng'] = mysql_result($result, $i, "object_lng"); 

     $finalArray = array_push($rows, array_merge($sign_type, $object_lat, $object_lng, $survey_lat, $survey_lng, $finalImg)); 

     $i++; 
    } 

    print json_encode($rows); 
    mysql_close(); 
} 

客戶端/ Android的側AsyncTask檢索(我修改我給之前反映MySQL查詢的答案,以及如何解析JSON數據):

class MyAsyncTask extends AsyncTask<String, String, Void> { 

    private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this); 
    InputStream inputStream = null; 
    String result = ""; 

    protected void onPreExecute() { 
     progressDialog.setMessage("Your progress dialog message..."); 
     progressDialog.show(); 
     progressDialog.setOnCancelListener(new OnCancelListener() { 
      public void onCancel(DialogInterface arg0) { 
       MyAsyncTask.this.cancel(true); 
      } 
     }); 
    } 

    @Override 
    protected Void doInBackground(String... params) { 

     String url_select = "http://yoururlhere.com/index.php?selectedCompany=true&companyName=examplevalue"; 

       ArrayList<NameValuePair> param = new ArrayList<NameValuePair>(); 

     try { 
      // Set up HTTP post 
      // HttpClient is more then less deprecated. Need to change to URLConnection 
      HttpClient httpClient = new DefaultHttpClient(); 

      HttpPost httpPost = new HttpPost(url_select); 
      httpPost.setEntity(new UrlEncodedFormEntity(param)); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 

      // Read content & Log 
      inputStream = httpEntity.getContent(); 
     } catch (UnsupportedEncodingException e1) { 
      Log.e("UnsupportedEncodingException", e1.toString()); 
      e1.printStackTrace(); 
     } catch (ClientProtocolException e2) { 
      Log.e("ClientProtocolException", e2.toString()); 
      e2.printStackTrace(); 
     } catch (IllegalStateException e3) { 
      Log.e("IllegalStateException", e3.toString()); 
      e3.printStackTrace(); 
     } catch (IOException e4) { 
      Log.e("IOException", e4.toString()); 
      e4.printStackTrace(); 
     } 
     // Convert response to string using String Builder 
     try { 
      BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"), 8); 
      StringBuilder sBuilder = new StringBuilder(); 

      String line = null; 
      while ((line = bReader.readLine()) != null) { 
       sBuilder.append(line + "\n"); 
      } 

      inputStream.close(); 
      result = sBuilder.toString(); 

     } catch (Exception e) { 
      Log.e("StringBuilding & BufferedReader", "Error converting result " + e.toString()); 
     } 
    } // protected Void doInBackground(String... params) 


    protected void onPostExecute(Void v) { 

     //parse JSON data 
     try{ 
      JSONArray jArray = new JSONArray(result); 

      for(int i=0; i < jArray.length(); i++) { 

       JSONObject jObject = jArray.getJSONObject(i); 

       String signType = jObject.getString("sign_type"); 
       double object_lat = jObject.getDouble("object_lat"); 
       double object_lng = jObject.getDouble("object_lng"); 
       double survey_lat = jObject.getDouble("survey_lat"); 
       double survey_lng = jObject.getDouble("survey_lng"); 
       String thumbnailImg = jObject.getString("thumbnail"); 
       byte[] encodeByte = Base64.decode(thumbnailImg, Base64.DEFAULT); 
       bmImg = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
       bmImg = Bitmap.createBitmap(bmImg); 

      } // End for Loop 

      this.progressDialog.dismiss(); 

     } catch (JSONException e) { 

      Log.e("JSONException", "Error: " + e.toString()); 

     } // catch (JSONException e) 


    } // protected void onPostExecute(Void v) 

} //class MyAsyncTask extends AsyncTask<String, String, Void> 
相關問題