Wednesday, August 3, 2016

ArrayList IndexOutOfBound Error

Hi! I am currently doing on a project and I keep hitting the same error despite making changes. I have been hitting indexOutOfBound error and unable to delete my listView item because of that error. I am doing on Tab and Database. Can anyone help me with my error and problem? Thank you!! :o



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_tab s.mabelUncompleted_Tab1$2.onClick(mabelUncompleted _Tab1.java:124)
at android.support.v7.app.AlertController$ButtonHandl er.handleMessage(AlertController.java:157)
at android.os.Handler.dispatchMessage(Handler.java:10 2)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.jav a:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:616)




Here are by Java Codes

Code:

package itp231.dba.nyp.com.mabel_createchallenge;

import android.content.Context;
import android.database.Cursor;

import java.util.ArrayList;

import itp231.dba.nyp.com.mabel_createchallenge.mabel_database.mabel_MyDBAdpater;

/*
 * Created by Guest Account on 13/7/2016.
 */
public class mabel_creatingChallengeApp {

    private static mabel_creatingChallengeApp ourInstance = new mabel_creatingChallengeApp();

    public static mabel_creatingChallengeApp getInstance() {
        return ourInstance;
    }

    public mabel_creatingChallengeApp() {
        challengesCreatedAL = new ArrayList<mabel_challenges>();
    }

    //* for mabelUncompleted_tab1.java */
    private ArrayList<mabel_challenges> challengesCreatedAL;

    public ArrayList<mabel_challenges> getArray() {
        return challengesCreatedAL;
    }  //getting the array from ArrayList<mabel_challenges>

    public ArrayList<mabel_challenges> getChallengesCreatedAL() {
        return challengesCreatedAL;
    }

    //add and delete entries in the database
    //add to database
    //context --> context of current state of the application/object
    //call it to get information regarding another part of your program (activity and package/application)
    public static long addToDatabase(mabel_challenges challenges, Context c) {
        mabel_MyDBAdpater db = new mabel_MyDBAdpater(c);
        db.open();

        long rowIDofInsertEntry = db.insertEntry(challenges);

        db.close();

        return rowIDofInsertEntry;
    }

    public static boolean deleteFromDatabase(int rowID, Context c) {
        mabel_MyDBAdpater db = new mabel_MyDBAdpater(c);
        db.open();

        boolean updateStatus = db.removeEntry(rowID);

        db.close();

        return updateStatus;
    }

    public static boolean updateDatabase(mabel_challenges cc, int rowID, Context c) {
        mabel_MyDBAdpater db = new mabel_MyDBAdpater(c);
        db.open();

        boolean updateStatus = db.updateEntry(rowID, cc);

        db.close();

        return updateStatus;
    }

    //populate array --> retrieve the array
    //get the context --> get the content from the page
    //store all retrieve data from database
    public void populateArrayFromDB(Context c) {
        challengesCreatedAL.clear();
        mabel_MyDBAdpater db = new mabel_MyDBAdpater(c);
        db.open();
        Cursor cur = db.retrieveAllEntriesCursor();
        cur.moveToFirst();
        while(cur.moveToNext()) {
            int rowID = cur.getInt(mabel_MyDBAdpater.COLUMN_KEY_ID);
            String nameOfChallenge = cur.getString(mabel_MyDBAdpater.COLUMN_NAME_ID);
            String descOfChallenge = cur.getString(mabel_MyDBAdpater.COLUMN_DESC_ID);
            String durationOfChallenge = cur.getString(mabel_MyDBAdpater.COLUMN_DURATION_ID);

            mabel_challenges newChallenge = new mabel_challenges(rowID, nameOfChallenge, descOfChallenge, durationOfChallenge);
            challengesCreatedAL.add(newChallenge);
        }
        db.close();
    }


}

Code:

package itp231.dba.nyp.com.mabel_createchallenge.mabel_tabs;

/*
fragment is part of an activity
*/

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

import itp231.dba.nyp.com.mabel_createchallenge.R;
import itp231.dba.nyp.com.mabel_createchallenge.mabel_EditChallengeActivity;
import itp231.dba.nyp.com.mabel_createchallenge.mabel_challengeDetailActivity;
import itp231.dba.nyp.com.mabel_createchallenge.mabel_challenges;
import itp231.dba.nyp.com.mabel_createchallenge.mabel_creatingChallengeApp;
import itp231.dba.nyp.com.mabel_createchallenge.mabel_database.mabel_myChallengesListAdapter;

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) {
        final 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().getApplicationContext(), challengesCreatedAL);
                        listOfItemsLV.setAdapter(challengeAdapter);
                        challengeAdapter.notifyDataSetChanged();



                        //prac 7b sales tracker -->delete the item
                        //selectedItem is the index of the array
                        mabel_creatingChallengeApp ca = mabel_creatingChallengeApp.getInstance();
                        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;
    }

    @Override
    public void onResume() {
        super.onResume();
        cc.populateArrayFromDB(getActivity().getApplicationContext());
    }
}

Code:

package itp231.dba.nyp.com.mabel_createchallenge.mabel_database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import itp231.dba.nyp.com.mabel_createchallenge.mabel_challenges;
import itp231.dba.nyp.com.mabel_createchallenge.mabel_creatingChallengeApp;

/**
 * Created by Guest Account on 13/7/2016.
 * for uncompleted Tab
 */

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
}



Can help me to see what's wrong? Thank you !!!! :)


from xda-developers http://ift.tt/2av3C6k
via IFTTT

No comments:

Post a Comment