2016-08-30 3 views
0

i заполняет listview данными из локальной базы данных sqlite. из моего текущего запроса я хочу получить имя и белок пищи, установил его в Textview, адаптер и запрос, чтобы получить эти данные, но он возвращает только имя, а не белок.Адаптер ListView не отображает все запрошенные данные

Вот класс адаптера:

public class Db_listView_Adapter extends CursorAdapter { 
public Db_listView_Adapter(Context context, Cursor cursor) { 
    super(context, cursor, 0); 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { 
    return LayoutInflater.from(context).inflate(R.layout.db_list, viewGroup, false); 
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    TextView foodName = (TextView) view.findViewById(R.id.foodNameInListView); 
    TextView foodProtein = (TextView) view.findViewById(R.id.foodProteinInListView); 
    TextView foodCarbs = (TextView) view.findViewById(R.id.foodCarbsInListView); 
    TextView foodFat = (TextView) view.findViewById(R.id.foodFatsInListView); 
    TextView foodCalories = (TextView) view.findViewById(R.id.foodCaloriesInListView); 
    TextView foodFibers = (TextView) view.findViewById(R.id.foodFibersInListView); 
    TextView foodVitA = (TextView) view.findViewById(R.id.foodVitAInListView); 
    TextView foodVitB = (TextView) view.findViewById(R.id.foodVitBInListView); 
    TextView foodCalcium = (TextView) view.findViewById(R.id.foodCalciumInListView); 
    TextView foodMagnesium = (TextView) view.findViewById(R.id.foodMagnesiumInListView); 

    String foodNameString = cursor.getString(cursor.getColumnIndexOrThrow("_FoodName")); 
    String foodProteinString = cursor.getString(cursor.getColumnIndexOrThrow("_FoodProtein")); 

    foodName.setText(foodNameString); 
    foodProtein.setText(foodProteinString); 
} 

}

Вот XML для макета ListView:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<TextView 
    android:id="@+id/foodNameInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodProteinInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodCarbsInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodFatsInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodCaloriesInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodFibersInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodVitAInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodVitBInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodCalciumInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/foodMagnesiumInListView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 


</LinearLayout> 

Здесь я пытаюсь получить данные из базы данных и заполните список:

public class Db_fragment extends Fragment { 
View view; 
ListView listView; 
Db_listView_Adapter db_listView_adapter; 


public Db_fragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.db_fragment, container, false); 
    listView = (ListView) view.findViewById(R.id.dbView); 

    return view; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    final MyDatabaseOpenHelper mDbHelper = new MyDatabaseOpenHelper(view.getContext()); 


    final EditText foodName = (EditText) view.findViewById(R.id.nameForDb); 
    Button enterData = (Button) view.findViewById(R.id.enterData); 
    Button showData = (Button) view.findViewById(R.id.showData); 
    final TextView errorTextNameMissing = (TextView) view.findViewById(R.id.errorTextNameMissing); 

    showData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if (foodName.getText().toString().trim().length() != 0) { 

       errorTextNameMissing.setText(""); 
       SQLiteDatabase myDb = mDbHelper.getReadableDatabase(); 
       String[] projection = {TableFoodMacros.FoodMacros._ID, TableFoodMacros.FoodMacros.FOOD_NAME, TableFoodMacros.FoodMacros.FOOD_PROTEIN}; 
       String rawQuery = "SELECT _ID, _Foodname , _FoodProtein FROM FoodMacros where _FoodName = " + "'" + foodName.getText().toString() + "'"; 

       Cursor c = myDb.rawQuery(rawQuery, null); 
       if(c.getCount() == 0){ 
        Intent goToSaveFood = new Intent(getActivity(),Save_Food.class); 
        goToSaveFood.putExtra("FoodName", foodName.getText().toString()); 
        myDb.close(); 
        startActivity(goToSaveFood); 
       }else { 

        db_listView_adapter = new Db_listView_Adapter(view.getContext(), c); 
        listView.setAdapter(db_listView_adapter); 
        myDb.close(); 
       } 
      } else { 
       errorTextNameMissing.setText(getResources().getString(R.string.errorTextNameMissing)); 
      } 

     } 
    }); 

} 

} 
+0

Вы уверены, что в столбце '_FoodProtein' есть непустая строка? –

+0

Я добавляю _FoodName и _FoodProtein перед тем, как попытаться извлечь его из базы данных. Я получаю имя, но не данные, которые я ввел в _FoodProtein. –

+0

. Вы пытались выполнить [debug] (https://developer.android.com/studio/debug/index.html) свое приложение, чтобы узнать, что происходит? –

ответ

0

Итак, я обнаружил, что проблема связана с активностью, которая добавляет данные в БД, я делал в onCreate вместо onClick ...; x

Смежные вопросы