IndexOutOfBounds

  • Replies:0
  • OpenNot stickiedUnanswered
  • Forum posts: 1

Aug 3, 2016 7:35:52 PM via Website

Hi i am facing this problem.. I have no idea why I am hitting this error often. Can anyone help with this as I am unsure. Thank you!

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at itp231.dba.nyp.com.mabel_createchallenge.mabel_tabs.mabelUncompleted_Tab1$2.onClick(mabelUncompleted_Tab1.java:125)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

//mabelUncompletedTab1

public class mabelUncompleted_Tab1 extends Fragment{

ListView listOfItemsLV;
ArrayList<mabel_challenges> challengesCreatedAL;
mabel_creatingChallengeApp cc;
public int selectedItem;

mabel_challenges c;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.mabel_tab_1_uncompleted, container, false);

    listOfItemsLV = (ListView) v.findViewById(R.id.challengesUncompletedLV);
    registerForContextMenu(listOfItemsLV);
    // addPage = (ImageButton) v.findViewById(R.id.addPage);

    //calling out Instance Variable before the adapater
    //to get challenges item on the list item
    cc = mabel_creatingChallengeApp.getInstance();

    //retrieve array from database
    cc.populateArrayFromDB(getActivity().getApplicationContext()); //because is fragment so getActivity --> fragment is the contents in the tab -->getActivity will get the whole screen contents including contents in the tab

    challengesCreatedAL = cc.getArray();

    //Adapter for List View
    mabel_myChallengesListAdapter challengesAdapter = new mabel_myChallengesListAdapter(getActivity(), challengesCreatedAL);
    listOfItemsLV.setAdapter(challengesAdapter);

    listOfItemsLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            //getting the position of item in the array list
            mabel_challenges c = challengesCreatedAL.get(i);

            //intent for challenge detail
            //mabel_challengeDetailActivity.class --> get to here
            Intent viewDetailsIntent = new Intent(getActivity().getApplicationContext(), mabel_challengeDetailActivity.class);

            //put extra --> Add extended data to the intent
            viewDetailsIntent.putExtra(mabel_challenges.INTENT_NAME_CHALLENGENAME, c.getName());
            viewDetailsIntent.putExtra(mabel_challenges.INTENT_NAME_DESCRIPTION, c.getDesc());
            viewDetailsIntent.putExtra(mabel_challenges.INTENT_NAME_DURATION, c.getDuration());
            viewDetailsIntent.putExtra("position", i);
            startActivity(viewDetailsIntent);
        }
    });
    return v;
}

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    menu.setHeaderTitle("Options");
    menu.add(1,1,1, "Edit");
    menu.add(1,2,2, "Delete");
}

public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    selectedItem = menuInfo.position;

    //mabel_challenges c = challengesCreatedAL.get(selectedItem);

    switch(item.getItemId()) {

        case 1:

            //edit challenge

            Intent editChallenge = new Intent (getActivity(), mabel_EditChallengeActivity.class);
            editChallenge.putExtra(mabel_challenges.INTENT_NAME_ARRAY_ITEM, selectedItem);
            startActivity(editChallenge);
            break;


        case 2:

            //delete challenge
            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
            dialogBuilder.setMessage("Confirm delete ?");

            dialogBuilder.setPositiveButton("Delete" ,new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    mabel_myChallengesListAdapter challengeAdapter = new mabel_myChallengesListAdapter(getActivity(), challengesCreatedAL);
                    listOfItemsLV.setAdapter(challengeAdapter);
                    challengeAdapter.notifyDataSetChanged();

                    mabel_creatingChallengeApp ca = mabel_creatingChallengeApp.getInstance();

                    //prac 7b sales tracker -->delete the item
                    //selectedItem is the index of the array

                    int challengeId = ca.getArray().get(selectedItem).getId();
                    mabel_creatingChallengeApp.deleteFromDatabase(challengeId, getActivity().getApplicationContext());
                    ca.populateArrayFromDB(getActivity().getApplicationContext());

                    Toast.makeText(getActivity().getApplicationContext(), "Deleted!", Toast.LENGTH_LONG).show();
                }
            });

            dialogBuilder.setNegativeButton("Cancel",new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    // dialogBuilder.setCancelable(true);
                    Toast.makeText(getActivity().getApplicationContext(), "Cancelled!", Toast.LENGTH_LONG).show();
                }
            });

            dialogBuilder.create();
            dialogBuilder.show();
            break;
    }
    return true;
}

//mabel_MyDBAdpater java class

public class mabel_MyDBAdpater {

private static final String DATABASE_NAME = "Challenges.db"; //name of database
private static final String DATABASE_TABLE = "ChallengesDatabase"; //database table name
private static final int DATABASE_VERSION = 2;
private SQLiteDatabase _db; //sqlite database handler
private final Context context; //current context

public static final String KEY_ID = "_id";
public static final int COLUMN_KEY_ID = 0;

public static final String ENTRY_CHALLENGE_NAME = "Name"; //name of column
public static final int COLUMN_NAME_ID = 1; //retrieval, position

public static final String ENTRY_CHALLENGE_DESC = "Description";
public static final int COLUMN_DESC_ID = 2;

public static final String ENTRY_CHALLENGE_DURATION = "Duration";
public static final int COLUMN_DURATION_ID = 3;

protected static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + " " + "(" + KEY_ID + " integer primary key autoincrement, " +
        ENTRY_CHALLENGE_NAME + " Text, " + ENTRY_CHALLENGE_DESC + " Text, " + ENTRY_CHALLENGE_DURATION + " Text);";

//making debugging easier
//a fix pid for Eclipse debugger
//open and close method
private String mabel_MyDBAdapter_LOG_CAT = "MY_LOG";

private MyDBOpenHelper dbHelper;

public mabel_MyDBAdpater(Context _context)
{
    this.context = _context;

    dbHelper = new MyDBOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION); //help to create object
}

public void close()
{
    _db.close();
    Log.w(mabel_MyDBAdapter_LOG_CAT, "DB closed");
}

public void open() throws SQLiteException
{
    try
    {
        _db = dbHelper.getWritableDatabase();
        Log.w(mabel_MyDBAdapter_LOG_CAT, "DB opened as writable database");
    }
    catch(SQLiteException e)
    {
        _db = dbHelper.getReadableDatabase();
        Log.w(mabel_MyDBAdapter_LOG_CAT, "DB opened as readable database");
    }
}

public long insertEntry(mabel_challenges cc)
{
    // Create a new record
    ContentValues newEntryValues = new ContentValues();

    // Assign values for each row
    newEntryValues.put(ENTRY_CHALLENGE_NAME, cc.getName());
    newEntryValues.put(ENTRY_CHALLENGE_DESC, cc.getDesc());
    newEntryValues.put(ENTRY_CHALLENGE_DURATION, cc.getDuration());

    // Insert the row
    Log.w(mabel_MyDBAdapter_LOG_CAT, "Inserted EntryName = " + cc.getName()
            + " EntryDesc = " + cc.getDesc() + " EntryDuration = " + cc.getDuration() + " into table " + DATABASE_TABLE);

    return _db.insert(DATABASE_TABLE, null, newEntryValues);
}

//removing data
public boolean removeEntry(long _rowIndex)
{
    if (_db.delete(DATABASE_TABLE, KEY_ID + " = " + _rowIndex, null) <= 0)
    {
        Log.w(mabel_MyDBAdapter_LOG_CAT, "Removing entry where id = "
                + _rowIndex + " Failed");

        return false;
    }

    Log.w(mabel_MyDBAdapter_LOG_CAT, "Removing entry where id = "
            + _rowIndex + " Success");

    return true;
}

//update method
public boolean updateEntry(long rowIndex, mabel_challenges cc) {
    ContentValues updateValues = new ContentValues();
    mabel_creatingChallengeApp ca = mabel_creatingChallengeApp.getInstance();

    updateValues.put(ENTRY_CHALLENGE_NAME, cc.getName());
    updateValues.put(ENTRY_CHALLENGE_DESC, cc.getDesc());
    updateValues.put(ENTRY_CHALLENGE_DURATION, cc.getDuration());

    String where = KEY_ID  + "=" + rowIndex; //selected id for updating data

    Log.w(mabel_MyDBAdapter_LOG_CAT, "Updated Challenge Name = " + cc.getName() + "Update Challenge Description = " + cc.getDesc() + "Update Duration = " + cc.getDuration() + " into table " +DATABASE_TABLE);

    if (_db.update(DATABASE_TABLE, updateValues, where, null) <= 0) {
        return true; //return success
    }
    return false; //newer update anything
}


//retrieve method
public Cursor retrieveAllEntriesCursor()
{
    Cursor c = null;

    try
    {
        c = _db.query(DATABASE_TABLE, new String[] {KEY_ID,ENTRY_CHALLENGE_NAME, ENTRY_CHALLENGE_DESC, ENTRY_CHALLENGE_DURATION}, null, null, null, null, null);
    }
    catch(SQLiteException e)
    {
        Log.w(mabel_MyDBAdapter_LOG_CAT, "Retrieve fail!");
    }

    return c;
}

public class MyDBOpenHelper extends SQLiteOpenHelper
{
    public MyDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
    {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }

    @Override //compulsory method
    public void onCreate(SQLiteDatabase db)
    {
        // TODO Auto-generated method stub
        db.execSQL(DATABASE_CREATE);
        Log.w(mabel_MyDBAdapter_LOG_CAT, "Helper : DB " + DATABASE_TABLE + " Created!!");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        // TODO Auto-generated method stub

    }

} // End of myDBOpenHelper

}