-1

habe ich diese Aktivitäten: CoffeeActivity und DrinkActivityVerwenden Sie zwei ArrayAdapter im gleichen Listview

Das ist meine Haupttätigkeit, die ein Listview

public class CalculationHistoryListActivity extends AppCompatActivity { 

    Save saveData; 
    ListView listView; 
    ArrayList arrayListdrink,arrayListCoffee; 

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

     // Toasts the test ad message on the screen. Remove this after defining your own ad unit ID. 
     // Toast.makeText(this, TOAST_TEXT, Toast.LENGTH_LONG).show(); 

     //sqlite database 
     saveData = new Save(CalculationHistoryListActivity.this); 

     //listview 
     listView = (ListView) findViewById(R.id.list); 

      //coffee list 
      arrayListCoffee = saveData.getAllCoffeeCalculation(); 
      ArrayAdapter coffeeArrayAdapter = new ArrayAdapter(CalculationHistoryListActivity.this, 
        R.layout.list_view_item_coffee, R.id.total_money_coffee, arrayListCoffee); 
      listView.setAdapter(coffeeArrayAdapter); 

     //drink list 
     arrayListdrink = saveData.getAllDrinkCalculation(); 
     ArrayAdapter drinkArrayAdapter = new ArrayAdapter(CalculationHistoryListActivity.this, 
       R.layout.list_view_item_coffee, R.id.total_money_drink,arrayList); 
       listView.setAdapter(drinkArrayAdapter); 

    } 

    @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_calculation_history_list, 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(); 

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

     return super.onOptionsItemSelected(item); 
    } 

} 

Dies ist mein Database Helper

public class Save extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "my.db"; 
    private static final String TABLE = "mytable"; 
    private static final String COFFEE = "coffee"; 
    private static final String DRINK = "drink"; 

    public Save(Context context) { 
     super(context, DATABASE_NAME, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     String query ; 
     query = "CREATE TABLE " +TABLE+ "(" +COFFEE+ " TEXT, " +DRINK+ " TEXT " + ")"; 
     sqLiteDatabase.execSQL(query); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
     sqLiteDatabase.execSQL(" DROP FILE IF EXISTS " + TABLE); 
     onCreate(sqLiteDatabase); 

    } 

    //this is coffee section 
    public boolean addDatabaseToCoffee(int i){ 
     SQLiteDatabase sqLiteDatabase = getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COFFEE,i); 
     long chaker = sqLiteDatabase.insert(TABLE,null,contentValues); 
     if (chaker == -1){ 
      return false; 
     }else { 
      return true; 
     } 

    } 
    //this is drink section 
    public boolean addDatabaseToDrink(int i){ 
     SQLiteDatabase sqLiteDatabase = getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(DRINK,i); 

     long chaker = sqLiteDatabase.insert(TABLE,null,contentValues); 
     if (chaker == -1){ 
      return false; 
     }else { 
      return true; 
     } 

    } 


    //coffee 
    public ArrayList<String> getAllCoffeeCalculation() { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     //hp = new HashMap(); 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("SELECT * FROM " + TABLE,null); 
     res.moveToFirst(); 

     while(res.isAfterLast() == false){ 
      array_list.add(res.getString(res.getColumnIndex(COFFEE))); 
      res.moveToNext(); 
     } 
     return array_list; 
    } 
    //drink 
    public ArrayList<String> getAllDrinkCalculation() { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     //hp = new HashMap(); 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("SELECT * FROM " + TABLE,null); 
     res.moveToFirst(); 

     while(res.isAfterLast() == false){ 

      //array_list.add(res.getString(res.getColumnIndex(DRINK))); 

      res.moveToNext(); 
     } 
     return array_list; 
    } 

} 
hat

Mein Problem ist, dass ich zwei Aktivitäten habe, und wenn ich die Kaffee - oder Getränke - Aktivität einmal benutze, ist es in Ordnung, aber wenn ich zwei Aktivitäten bei beiden benutzen möchte einmal, meine app stürzt

Mein LogCat

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
                      at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401) 
                      at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 
                      at android.widget.AbsListView.obtainView(AbsListView.java:3065) 
                      at android.widget.ListView.makeAndAddView(ListView.java:1945) 
                      at android.widget.ListView.fillDown(ListView.java:719) 
                      at android.widget.ListView.fillFromTop(ListView.java:785) 
                      at android.widget.ListView.layoutChildren(ListView.java:1735) 
                      at android.widget.AbsListView.onLayout(AbsListView.java:2852) 
                      at android.view.View.layout(View.java:17995) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5817) 
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742) 
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                      at android.view.View.layout(View.java:17995) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5817) 
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:281) 
                      at android.widget.ScrollView.onLayout(ScrollView.java:2537) 
                      at android.view.View.layout(View.java:17995) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5817) 
                      at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080) 
                      at android.view.View.layout(View.java:17995) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5817) 
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:281) 
                      at android.view.View.layout(View.java:17995) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5817) 
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742) 
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                      at android.view.View.layout(View.java:17995) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5817) 
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:281) 
                      at android.view.View.layout(View.java:17995) 
                      at android.view.ViewGroup.layout(ViewGroup.java:5817) 
+1

Sie können nicht zwei Adapter im gleichen Listview verwenden, aber das ist in keinem Zusammenhang mit Ihrem Fehler –

+0

Sie eine Listenansicht haben und versuchen, es zu zwei gesetzt arrayAdapter ... listView.setAdapter (coffeeArrayAdapter); & listView.setAdapter (drinkArrayAdapter); Warum? – shanyour

+0

@shanyour, weil ich eine zwei Aktivität habe, ist CoffeeActivity And Secand ist Getränk Aktivität in Kaffee oder Getränk Aktivität Benutzer kann dort Preis oder etc. berechnen ok ich erkläre mehr, wenn Benutzer klicken Sie auf Nummer 1 Kaffee Aktivität dann haben sie Preis berechnet und gehen Sie weiter 2 Aktivität, um die Vorschau und vor dem Speichern zu priorisieren, damit der Benutzer die Daten speichert. und dann 3. Aktivität Daten in der Datenbank speichern und als Listenansicht anzeigen. und diese 3. Aktivität sind die alle Berechnung zeigen, wenn Benutzer Kaffee Preis dann diese Aktivität zeigen oder Benutzer speichern Getränk Preis dann hören zeigen, deshalb muss ich auf Wert speichern –

Antwort

2

Ihr Fehler ist der Adapter von innen kommen.

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
    -->  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401) 
    -->  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 
    -->  at android.widget.AbsListView.obtainView(AbsListView.java:3065) 

Erstens Ihr Getränk Liste ist leer ... Sie diese Zeile

//array_list.add(res.getString(res.getColumnIndex(DRINK))); 

Und was ist arrayList hier kommentiert?

arrayListdrink = saveData.getAllDrinkCalculation(); 
ArrayAdapter drinkArrayAdapter = new ArrayAdapter(CalculationHistoryListActivity.this, 
     R.layout.list_view_item_coffee, R.id.total_money_drink,arrayList); 
                   ^^^ 

und Sie sollten DROP TABLE, nicht FILE ...

sqLiteDatabase.execSQL(" DROP FILE IF EXISTS " + TABLE); 

Wenn Ihre Datenbank gearbeitet, dann sehe ich nichts anderes falsch mit dem, was Sie haben. Löschen Sie Ihre App-Daten, um die Datenbank neu zu erstellen, beheben Sie diese Probleme, dann sollten Sie eine Liste der Getränk Werte sehen.


Wie auch immer, nein, Sie können nicht zwei Adapter in einem ListView anzeigen.

Sie können jedoch beide Spalten Ihrer Datenbank zu einer ArrayList hinzufügen und beide in einem Adapter anzeigen.

// coffee and drink 
public ArrayList<String> getAllCoffeeCalculation() { 
    ArrayList<String> array_list = new ArrayList<String>(); 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor res = db.rawQuery("SELECT * FROM " + TABLE,null); 
    res.moveToFirst(); 

    while(res.isAfterLast() == false){ 
     String c = res.getString(res.getColumnIndex(COFFEE)); 
     String d = res.getString(res.getColumnIndex(DRINK)); 

     array_list.add(c + "\t" + d); 
     res.moveToNext(); 
    } 
    return array_list; 
} 

Dann in der Aktivität.

saveData = new Save(CalculationHistoryListActivity.this); 

listView = (ListView) findViewById(R.id.list); 

arrayListCoffee = saveData.getAllCoffeeCalculation(); 
ArrayAdapter<String> coffeeArrayAdapter = new ArrayAdapter<String>(
     CalculationHistoryListActivity.this, 
     android.R.layout.simple_list_item_1, 
     arrayListCoffee); 
listView.setAdapter(coffeeArrayAdapter); 
+0

Vielen Dank @ crinket_007 –

+0

aber es ist nicht mein Problem lösen, aber können Sie mir sagen, wenn ich if (coffeeArrayAdapter! = Null) { // print Kaffee listView.setAdapter (coffeeArrayAdapter); } sonst if (drinkArrayAdapter! = Null) { // print trink listView.setAdapter (drinkArrayAdapter); Ich versuche, mich selbst so zu lösen, aber es funktioniert nicht können Sie mir bitte sagen, es gibt Weg zur Arbeit Singel-Aktivität eine einzige Zeit nicht beide gleichzeitig arbeiten –

+0

Keine Ihrer Adapter-Objekt kann null sein. Sie haben explizit einen 'neuen ArrayAdapter' erstellt. Ich weiß nicht, was Sie auf dem ListView sehen möchten, aber meine Antwort ist nur eine * mögliche * Lösung für Ihr Problem. –

Verwandte Themen