mercredi 6 avril 2016

SQLite Database not displaying on ListView when Saved with a Button.

Thanks in advance for helping me out. This is my first time working on SQLite Database as well as creating an app.

Problem: When I click save"ImageButton" on the AddEntry.xml for some reason its not displaying on my listview which is located in my Fragment Home.xml. I found fragments to be a tad difficult since you have to change the code around in order for it to work. so please excuse if my code is all over the place.

AddEntry.java

      public class AddEntry extends Fragment implements View.OnClickListener
    {

      EditText DescriptionET,CalorieET;
      ImageButton Savebtn, Cancelbtn;

      String description , calorieAmt;
       CalorieDatabase calorieDB;


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


       @Override
       public View onCreateView(LayoutInflater inflater, ViewGroup
        container,
                         Bundle savedInstanceState) {
        // Inflate the layout for this fragment
       View myView = inflater.inflate(R.layout.fragment_add_entry,
      container, false);

      Savebtn = (ImageButton) myView.findViewById(R.id.SaveBtn);
      Savebtn.setOnClickListener(this);


      Cancelbtn = (ImageButton) myView.findViewById(R.id.CancelBtn);
      Cancelbtn.setOnClickListener(this);
      return myView;
  }


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

       DescriptionET= (EditText)view.findViewById(R.id.foodEditText);
       CalorieET=(EditText)view.findViewById(R.id.caloriesEditText);

    }


        @Override
        public void onClick(View v) {
        switch (v.getId()) {


        case R.id.SaveBtn:


            description = DescriptionET.getText().toString();
            calorieAmt=CalorieET.getText().toString();




             ((appMain) getActivity()).loadSelection(0);


            break;


            case R.id.CancelBtn:

              EditText descriptionET=
           (EditText)getView().findViewById(R.id.foodEditText);
          descriptionET.setText("");


            EditText calorieET= 
          (EditText)getView().findViewById(R.id.caloriesEditText);
            calorieET.setText("");

                break;
           }
      }


          @Override
          public void onDestroy() {
          super.onDestroy();

           }

          @Override
         public void onDetach() {
         super.onDetach();
          } 

      }

FragmentHome.java

                 public class FragmentHome extends Fragment implements 
                 View.OnClickListener  {

                public static final String ARG_SECTION_NUMBER = 
              "section_number";

               public static final String ARG_ID = "_id";
               private TextView label;
               private int sectionNumber = 0;
               private Calendar fragmentDate;
               ListView  listview;
               ImageButton AddEntrybtn;
               CalorieDatabase calorieDB;
               private View v;



         private android.support.v4.app.FragmentManager fragmentManager;

         private FragmentTransaction fragmentTransaction;

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


             @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup
             container,
                         Bundle savedInstanceState) {

            View myView = inflater.inflate(R.layout.fragment_home,
           container, false);


           label= (TextView) myView.findViewById(R.id.section_label);


          AddEntrybtn = (ImageButton) myView.findViewById(R.id.AddItems);
          AddEntrybtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
            ((appMain)getActivity()).loadSelection(1);
           }
        });

          return myView;
       }




               @Override
             public void onActivityCreated(Bundle savedInstanceState) {
             super.onActivityCreated(savedInstanceState);

             Bundle username = getActivity().getIntent().getExtras();



             String username1 = username.getString("Username");

             TextView userMain= (TextView)
             getView().findViewById(R.id.User);

              userMain.setText(username1);


             openDataBase();

          }



                  private  void openDataBase (){


                 calorieDB= new CalorieDatabase(getActivity());
                 calorieDB.open();


         }


             private void closeDataBase(){
             calorieDB.close();
        };


             private   void populateLVFromDB(){

             Cursor cursor = calorieDB.getAllRows();




              String[] fromFieldNames = new String[]
            {CalorieDatabase.KEY_NAME, CalorieDatabase.KEY_CalorieValue};
             int[] toViewIDs = new int[]
            {R.id.foodEditText,     R.id.caloriesEditText,           };


              SimpleCursorAdapter myCursorAdapter =
              new SimpleCursorAdapter(
                    getActivity(),      
                   R.layout.row_item,
                    cursor,                 
                    fromFieldNames,         
                    toViewIDs           
            );

             // Set the adapter for the list view
          listview = (ListView) getActivity().findViewById(R.id.listViewDB);
          listview.setAdapter(myCursorAdapter);


     }



               @Override
               public void onResume() {
               super.onResume();
               // set label to selected date.  Get date from Bundle.
               int dayOffset = sectionNumber - 
               FragmentHomeDayViewPager.pagerPageToday;
               fragmentDate = Calendar.getInstance();

               fragmentDate.add(Calendar.DATE, dayOffset);
               SimpleDateFormat sdf = new
               SimpleDateFormat(appMain.dateFormat);

               String labelText = sdf.format(fragmentDate.getTime());
               switch (dayOffset) {
                case 0:
            labelText += " (Today)";
            break;
              case 1:
            labelText += " (Tomorrow)";
            break;
            case -1:
            labelText += " (Yesterday)";
            break;
           }
              label.setText(labelText);

         }

                     @Override
                    public void onDestroy() {
                    super.onDestroy();
                    closeDataBase();
                }



                     @Override
                     public void onDetach() {
                     super.onDetach();

               startActivity( new Intent(getContext(),MainActivity.class));
               }


                       @Override
                       public void onClick(View v) {
                       switch (v.getId()) {
                       case R.id.AddItems:

                    AddEntry addEntry    = new AddEntry();

                   fragmentTransaction = fragmentManager.beginTransaction();
                   fragmentTransaction.addToBackStack(null);
                   fragmentTransaction.replace(R.id.FragmentHolder,addEntry)

                    .commit();


                    break;
                }


               }
           }

CalorieDatabase.java

               public class CalorieDatabase {

               //   Constants & Data

               private static final String TAG = "DBAdapter";

               // DB Fields
               public static final String KEY_ROWID = "_id";
               public static final int COL_ROWID = 0;

               public static final String KEY_NAME = "Description";

               public static final String KEY_CalorieValue = "Calories";

               public static final int COL_NAME = 1;
               public static final int COL_CalorieValue= 2;



               public static final String[] ALL_KEYS = new String[]
               {KEY_ROWID, KEY_NAME, KEY_CalorieValue};


              public static final String DATABASE_NAME = "CalorieDb";
              public static final String DATABASE_TABLE = "Calorie_Info";

              public static final int DATABASE_VERSION = 1;

           private static final String DATABASE_CREATE_SQL =
           "create table " + DATABASE_TABLE
                + " (" + KEY_ROWID + " integer primary key autoincrement, "
                + KEY_NAME + " text not null, "
                + KEY_CalorieValue + " integer not null "
                + ");";


              private final Context context;

              private DatabaseHelper myDBHelper;
              private SQLiteDatabase db;



              public CalorieDatabase(Context ctx) {
             this.context = ctx;
              myDBHelper = new DatabaseHelper(context);
           }

                 // Open the database connection.
                public CalorieDatabase open() {
                db = myDBHelper.getWritableDatabase();
                return this;
              }

                // Close the database connection.
                 public void close() {
                myDBHelper.close();
           }

             // Add a new set of values to the database.
            public long insertRow(String description, int CalorieVal) {

            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_NAME, description);
            initialValues.put(KEY_CalorieValue, CalorieVal);


             // Insert it into the database.
             return db.insert(DATABASE_TABLE, null, initialValues);
           }

            // Delete a row from the database, by rowId (primary key)
           public boolean deleteRow(long rowId) {
           String where = KEY_ROWID + "=" + rowId;
           return db.delete(DATABASE_TABLE, where, null) != 0;
        }

            public void deleteAll() {
            Cursor c = getAllRows();
            long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
            if (c.moveToFirst()) {
            do {
            deleteRow(c.getLong((int) rowId));
            } while (c.moveToNext());
          }
            c.close();
          }

          // Return all data in the database.
         public Cursor getAllRows() {
         String where = null;
         Cursor c =     db.query(true, DATABASE_TABLE, ALL_KEYS,
            where, null, null, null, null, null);
          if (c != null) {
          c.moveToFirst();
          }
          return c;
      }

         // Get a specific row (by rowId)
         public Cursor getRow(long rowId) {
        String where = KEY_ROWID + "=" + rowId;
        Cursor c =  db.query(true, DATABASE_TABLE, ALL_KEYS,
            where, null, null, null, null, null);
         if (c != null) {
          c.moveToFirst();
        }
        return c;
        }

        // Change an existing row to be equal to new data.
       public boolean updateRow(long rowId, String description, int 
      CalorieValue) {
      String where = KEY_ROWID + "=" + rowId;


       ContentValues newValues = new ContentValues();
       newValues.put(KEY_NAME, description);
       newValues.put(KEY_CalorieValue, CalorieValue);


         // Insert it into the database.
       return db.update(DATABASE_TABLE, newValues, where, null) != 0;
    }


         private static class DatabaseHelper extends SQLiteOpenHelper
     {
         DatabaseHelper(Context context) {
         super(context, DATABASE_NAME, null, DATABASE_VERSION);
      }

         @Override
         public void onCreate(SQLiteDatabase _db) {
        _db.execSQL(DATABASE_CREATE_SQL);
      }

                     @Override
        public void onUpgrade(SQLiteDatabase _db, int oldVersion, int  
        newVersion) {
        Log.w(TAG, "Upgrading application's database from version " + 
        oldVersion
                + " to " + newVersion + ", which will destroy all old 
         data!");

        // Destroy old database:
        _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);

        // Recreate new database:
        onCreate(_db);

         }
         }
    }

Thanks again for helping me out. I've been stressing for the last couple of days trying to figure it out.

Aucun commentaire:

Enregistrer un commentaire