2013-01-03 15 views
0

我有一個簡單的汽車數據庫是這樣的:我怎麼能發送從數據庫中的所有字段在java文件到另一個Java文件?

db.addCar(new Car("Alfa Romeo","Giulietta","1.4 TB Distinctive","Benzine","1.4","120","2012","5","1465","4351","54000")); 
     db.addCar(new Car("Audi","A6","2.0 TDi","Diesel","2.0","170","2012","6","1455","4915","183600")); 
     db.addCar(new Car("BMW","7 Series","7.30 ID Comfort","Benzine","3.0","245","2012","6","1450","4835","528000")); 
     db.addCar(new Car("Chevrolet","Captiva","2.0 LT AT","Diesel","2.0","163","2012","6","1756","4673","79950")); 
     db.addCar(new Car("Citroen","C5","1.6 HDi Comfort","Diesel","1.6","112","2012","5","1458","4779","67430")); 

我'使用3個紡紗廠選擇前三個欄(製造商,型號,類型),還我可以送他們到我的結果XML頁面用這種方法

b3.setOnTouchListener(new View.OnTouchListener(){ 
      @Override 
       public boolean onTouch(View comparePage2, MotionEvent event) { 

       Intent intent = new Intent(getApplicationContext(), Compare2.class); 
        //Create a bundle object 
        Bundle car = new Bundle(); 

        //Inserts a String value into the mapping of this Bundle 
        car.putString("make", spinner_make.getSelectedItem().toString()); 
        car.putString("model", spinner_model.getSelectedItem().toString()); 
        car.putString("type", spinner_type.getSelectedItem().toString()); 
        car.putString("make2", spinner_make2.getSelectedItem().toString()); 
        car.putString("model2", spinner_model2.getSelectedItem().toString()); 
        car.putString("type2", spinner_type2.getSelectedItem().toString()); 


        //Add the bundle to the intent. 
        intent.putExtras(car); 


        //start the DisplayActivity 
        startActivity(intent); 

       return false; 
       } 

private void loadSpinnerData() { 
     DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 

     List <String> makers = db.getAllMakers(); 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, makers); 

     List <String> models = db.getAllModels(); 
     ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, models); 

     List <String> types = db.getAllTypes(); 
     ArrayAdapter<String> dataAdapter3 = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, types); 

     List <String> makers2 = db.getAllMakers(); 
     ArrayAdapter<String> dataAdapter4 = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, makers2); 

     List <String> models2 = db.getAllModels(); 
     ArrayAdapter<String> dataAdapter5 = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, models2); 

     List <String> types2 = db.getAllTypes(); 
     ArrayAdapter<String> dataAdapter6 = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, types2); 


     spinner_make.getContext(); 

// Drop down layout style - list view with radio button 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

// attaching data adapter to spinner 
     spinner_make.setAdapter(dataAdapter); 
     spinner_model.setAdapter(dataAdapter2); 
     spinner_type.setAdapter(dataAdapter3); 
     spinner_make2.setAdapter(dataAdapter4); 
     spinner_model2.setAdapter(dataAdapter5); 
     spinner_type2.setAdapter(dataAdapter6); 


} 

但我怎麼能發送其他領域到XML頁面用同樣的方法?

+0

通過在'Bundle car'中添加更多鍵值對,類似於您爲'make','model'和'type'所做的事情。但是,由於它看起來像有一個'Car'對象,所以實現'Serializable'(或'Parcelable')並將整個對象放在'Bundle'中可能會更容易,而不是每個字段的值。 –

+0

例如,如果我選擇audi a6 2.0 TDI通過使用旋鈕,我怎麼能發送這輛車的其他領域的其他文件? – Mehmet

+0

那麼,你可能在某處做了一個數據庫查詢來填充3個spinners的適配器?這就是你應該擁有所有你需要的數據的地方。理想情況下'getSelectedItem()'將返回一個'Car'對象,然後您可以簡單地傳遞給下一個活動(因爲它包含所有字段)。爲了進一步幫助您,請在代碼中顯示從數據庫獲取數據的位置並初始化微調控制器適配器。 –

回答

1

簡短的回答是:你需要找回所有你想通過從數據庫發送到下一個Activity數據。話雖這麼說,我可能會做以下修改來實現這一目標:

1.從數據庫中的所有(必需的)數據

在你DatabaseHandler類,創建一個返回所有汽車的方法,由做你的第一個代碼片段的反面。或者至少返回下一個Activity所需的全部數據。我會假設你會在這裏返回的所有數據:

Cursor c = // TODO: implement: query database for car data 
List<Car> cars = new ArrayList<Car>(); 
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
    cars.add(new Car(...)); // add every car 
} 

2.有Car實施Serializable

將您的Car類的定義更改爲Serializable。這應該是沒有問題的,假定類只是一個簡單的字段集合:

public class Car implements Serializable { 
    private static final long serialVersionUID = 1234567890L; 

    // constructor(s), fields, getters, setters below 
} 

3.獲取選中的車從微調

對於這個例子的目的,我只是要通過使用所選的位置從原來的收集得到步驟1中的汽車和它放入Intent(無需創建一個單獨的Bundle):

Intent intent = new Intent(getApplicationContext(), Compare2.class); 
Car selectedCar = cars.get(spinner.getSelectedItemPosition()); 
intent.putSerializableExtra("selected_car", selectedCar); 

可以多單車,甚至是整個集合(前提是集也實現Serializable做到這一點;即ArrayList)。在接收端,就可以檢索數據做上述相反:

Car selectedCar = (Car) getIntent().getSerializableExtra("selected_car"); 

現在,您的代碼片段建議你要去不同的車的規格比較,在未來Activity。如果是這樣的話,那麼你可能不需要改變很多。我會考慮更改適配器從cars收集得到他們的數據,而不是再次查詢數據庫中的數據的一列,你已經有了 - 這應該是一個簡單的變化。

如果你有某種過濾回事,根據不同的紡紗廠的選擇,那麼你要確保你的方法返回的所有數據的汽車藉此選擇考慮。我會留給你自己弄清楚這些細節。

相關問題