habe ich diese Aktivitäten: CoffeeActivity
und DrinkActivity
Verwenden 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)
Sie können nicht zwei Adapter im gleichen Listview verwenden, aber das ist in keinem Zusammenhang mit Ihrem Fehler –
Sie eine Listenansicht haben und versuchen, es zu zwei gesetzt arrayAdapter ... listView.setAdapter (coffeeArrayAdapter); & listView.setAdapter (drinkArrayAdapter); Warum? – shanyour
@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 –