2015-01-16 40 views
0

所以這是我在Stackoverflow的第一個問題。讓我們看看,如果我設法正確地問我的問題:android sqlite微調不顯示SimplCursorAdapter

我有一個SQLite數據庫(lights_db)和兩個Spinners(spinnerLightType和spinnerLightSelector)。根據spinnerLightType(「HMI」,「Tungsten」,「Fluorescent」或「LED」)的選擇,我想通過查詢中的選擇將不同的light_db項加載到spinnerLightSelector中。查詢是好的,遊標有數據,問題是它只是不顯示它在微調,我不明白爲什麼。

這裏是在MainActivity代碼的一部分:

public class MainActivity extends ActionBarActivity { 

double Transmission = 1.0; 
double Z = 1.0; 

Light_SQL light_db = new Light_SQL(this); 

Spinner spinnerLightType, spinnerLightSelector; 

public Context mContext; 

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

    // add lights to light_db 
    createLightDB(); 
    mContext = this; 
    spinnerLightType = (Spinner) findViewById(R.id.spinnerLightType); 
    spinnerLightType.setSelection(1); 
    spinnerLightType.setOnItemSelectedListener(new OnItemSelectedListener() { 
     public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){ 
      System.out.println("Technology set to : " + parent.getItemAtPosition(pos).toString()); 
      Cursor light_cc = light_db.getWritableDatabase().query("lights", // a. table 
        new String[]{"id AS _id", "technology", "name"}, // b. column names 
        "technology=?", // c. selections 
        new String[]{parent.getItemAtPosition(pos).toString()}, // d. selections args 
        null, // e. group by 
        null, // f. having 
        null, // g. order by 
        null); // h. limit 
      if (light_cc.moveToFirst()) { 
       do { 
        System.out.println("Item : " + light_cc.getString(0) + "Technology : " + light_cc.getString(1) + " name : " + light_cc.getString(2)); 
       } while (light_cc.moveToNext()); 
      } 
      String[] from = new String[] {"name"}; 
      int[] to = new int[] {android.R.id.text1}; 
      SimpleCursorAdapter light_sca = new SimpleCursorAdapter(mContext, android.R.layout.simple_spinner_item, light_cc, from, to); 
      light_sca.setDropDownViewResource(android.R.layout.simple_spinner_item); 
      spinnerLightSelector.setAdapter(light_sca); 
      light_cc.close(); 
     } 
     public void onNothingSelected(AdapterView<?> parent) {} 
    }); 

    spinnerLightSelector = (Spinner) findViewById(R.id.spinnerLightSelector); 
    spinnerLightSelector.setOnItemSelectedListener(new OnItemSelectedListener() { 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id){ 
      Z = light_db.getLight((int) id).getZ(); 
      System.out.println("Z set to : " + Z); 
     } 
     public void onNothingSelected(AdapterView<?> parent) {} 
    }); 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

public void createLightDB() { 
    // HMI 
    // ARRI PocketPar 
    light_db.addLight(new Light("HMI","ARRI PocketPar 150", 150, 3.67)); 
    light_db.addLight(new Light("HMI","ARRI PocketPar 200", 200, 2.49)); 
    light_db.addLight(new Light("HMI","ARRI PocketPar 400", 400, 1.94)); 
    // K5600 Joker-Series 
    light_db.addLight(new Light("HMI","K5600 Joker 200", 200, 2.44)); 
    light_db.addLight(new Light("HMI","K5600 Joker 400", 400, 2.44)); 
    light_db.addLight(new Light("HMI","K5600 Joker 800", 800, 1.45)); 
    light_db.addLight(new Light("HMI","K5600 Joker 1600", 1600, 0.67)); 
    // K5600 Alpha-Series 
    light_db.addLight(new Light("HMI","K5600 Alpha 4k", 200, 0.45)); 
    light_db.addLight(new Light("HMI","K5600 Alpha 18k", 400, 0.28)); 
    // Arri D-Series 
    light_db.addLight(new Light("HMI","ARRI D5", 575, 1.78)); 
    light_db.addLight(new Light("HMI","ARRI D12", 1200, 1.14)); 
    light_db.addLight(new Light("HMI","ARRI D25", 2500, 0.87)); 
    light_db.addLight(new Light("HMI","ARRI D40", 4000, 0.69)); 
    // ArriSun series 
    light_db.addLight(new Light("HMI","ARRISUN 25", 2500, 0.87)); 
    light_db.addLight(new Light("HMI","ARRISUN 40", 4000, 0.69)); 
    // Arri Compact 
    light_db.addLight(new Light("HMI","ARRI Compact 6000", 6000, 0.54)); 
    // Arri M-Series 
    light_db.addLight(new Light("HMI","ARRI M8", 800, 1.49)); 
    light_db.addLight(new Light("HMI","ARRI M18", 1800, 0.96)); 
    light_db.addLight(new Light("HMI","ARRI M25", 2500, 0.96)); 
    light_db.addLight(new Light("HMI","ARRI M40", 4000, 0.60)); 
    light_db.addLight(new Light("HMI","ARRI M90", 9000, 0.34)); 
    // Arri Daylight-Series 
    light_db.addLight(new Light("HMI","ARRI Daylight 12", 12000, 0.42)); 
    light_db.addLight(new Light("HMI","ARRI Daylight 18", 18000, 0.36)); 
    light_db.addLight(new Light("HMI","ARRIMAX 18", 18000, 0.27)); 

    // Tungstene 
    // Fresnels 
    light_db.addLight(new Light("Tungsten","150 W Fresnel", 150, 6.76)); 
    light_db.addLight(new Light("Tungsten","300 W Fresnel", 300, 4.78)); 
    light_db.addLight(new Light("Tungsten","650 W Fresnel", 650, 2.68)); 
    light_db.addLight(new Light("Tungsten","1 kW Fresnel", 1000, 2.04)); 
    light_db.addLight(new Light("Tungsten","2 kW Fresnel", 2000, 1.60)); 
    light_db.addLight(new Light("Tungsten","5 kW Fresnel", 50000, 0.83)); 
    light_db.addLight(new Light("Tungsten","10 kW Fresnel", 10000, 0.62)); 
    light_db.addLight(new Light("Tungsten","12 W Fresnel", 12000, 0.56)); 
    light_db.addLight(new Light("Tungsten","20 kW Fresnel", 20000, 0.46)); 
    light_db.addLight(new Light("Tungsten","24 W Fresnel", 240000, 0.42)); 
    // Open Face 
    light_db.addLight(new Light("Tungsten","800 W Open Face", 2000, 2.36)); 
    light_db.addLight(new Light("Tungsten","2 kW Open Face", 2000, 1.99)); 

    // Fluorescent 
    // KinoFlo 
    light_db.addLight(new Light("Fluorescent","KinoFlo 4ft 4Bank", 300, 5.21)); 
    light_db.addLight(new Light("Fluorescent","KinoFlo 4ft 2Bank", 150, 7.17)); 
    light_db.addLight(new Light("Fluorescent","KinoFlo 2ft 4Bank", 160, 0.78)); 
    light_db.addLight(new Light("Fluorescent","KinoFlo 2ft 2Bank", 80, 12.42)); 
    light_db.addLight(new Light("Fluorescent","KinoFlo 4ft 1Bank", 75, 9.56)); 
    light_db.addLight(new Light("Fluorescent","KinoFlo 2ft 1Bank", 40, 17.56)); 

    // LED 
    // LitePanel 
    light_db.addLight(new Light("LED","LitePanel 30x30", 40, 4.57)); 
} 
} 

和這裏是logcat的(即證明了光標絕對有數據,我挑選在spinnerLightType「LED」,然後「熒光」):

01-16 13:17:42.144 31987-31987/com.example.georges.benilux I/System.out﹕ Item : 43 Technology : LED name : LitePanel 30x30 
01-16 13:17:47.409 31987-31987/com.example.georges.benilux I/System.out﹕ Technology set to : Fluorescent 
01-16 13:17:47.413 31987-31987/com.example.georges.benilux I/System.out﹕ Item : 37 Technology : Fluorescent name : KinoFlo 4ft 4Bank 
01-16 13:17:47.413 31987-31987/com.example.georges.benilux I/System.out﹕ Item : 38 Technology : Fluorescent name : KinoFlo 4ft 2Bank 
01-16 13:17:47.413 31987-31987/com.example.georges.benilux I/System.out﹕ Item : 39 Technology : Fluorescent name : KinoFlo 2ft 4Bank 
01-16 13:17:47.413 31987-31987/com.example.georges.benilux I/System.out﹕ Item : 40 Technology : Fluorescent name : KinoFlo 2ft 2Bank 
01-16 13:17:47.413 31987-31987/com.example.georges.benilux I/System.out﹕ Item : 41 Technology : Fluorescent name : KinoFlo 4ft 1Bank 
01-16 13:17:47.413 31987-31987/com.example.georges.benilux I/System.out﹕ Item : 42 Technology : Fluorescent name : KinoFlo 2ft 1Bank 

那麼,爲什麼光標中的數據不會出現在LightTypeSelector中?其他問題:爲什麼Android Studio中告訴我「SimpleCursorAdapter」折舊...

回答

0

Android Studio中可能會告訴你,你正在使用SimpleCursorAdapter構造被棄用:

public SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to) 

在API級別1 這個構造函數是在API級別11

見的Android文檔棄用:http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html

+0

感謝您的快速答覆。任何想法爲什麼我的微調不加載光標的數據? – Georges

+0

notifyDatasetChanged()後spinnerLightSelector.setAdapter(...) – barq

+0

嗨吧,添加notifyDatasetChanged也沒有幫助。自從幾天以來,這一直令我煩惱...... – Georges