繁体   English   中英

如何检查可扩展列表视图在Android中是否为空?

[英]How to check Expandable list view is empty in Android?

我正在创建用于填充Android中可扩展列表视图的android应用程序。 我已经成功地完成了从SQLite填充可扩展列表视图的操作。 但是问题是经过一些更改后,我必须在活动中添加两个按钮,其中是可扩展的列表视图。

当我单击第一个button_btnNewProject时,它转到第二个活动,在第二个活动中,我插入了一些项目详细信息,当我回到同一活动时,该项目详细信息要显示在可扩展列表视图中。

当我运行项目应用程序时崩溃并获取异常`java.lang.IndexOutOfBoundsException:无效的索引0,大小为0。 之前它在我的可扩展列表视图中显示。

这是我的数据库帮助程序代码。

public boolean insertProject  (String strProjectName, String strCreatedDate, String strEndDate, String strIsActive)
   {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put(Project_Name, strProjectName);
      contentValues.put(Project_Date_Created, strCreatedDate);
      contentValues.put(Project_End_Date, strEndDate);  
      contentValues.put(Project_Is_Active, strIsActive);


      db.insert(CONTACTS_TABLE_NAME, null, contentValues);
      db.close();
      return true;
   }

   public Cursor getData(String string){
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor res =  db.rawQuery( "select * from" +CONTACTS_TABLE_NAME + "where"+Project_id+"="+string+"", null );
      return res;
   }

   public int numberOfRows(){
      SQLiteDatabase db = this.getReadableDatabase();
      int numRows = (int) DatabaseUtils.queryNumEntries(db, CONTACTS_TABLE_NAME);
      return numRows;
   }



   public List viewTable() {
       //String result="";
       List arrList=new ArrayList ();
       try {
           SQLiteDatabase db=this.getWritableDatabase();
           String query="select * from " + CONTACTS_TABLE_NAME;
           Log.d("query message  ", query);
           Cursor c = db.rawQuery(query, null);
            size=c.getCount();
           nameVal=new String[size];
           dateval=new String[size];
           endDateVal=new String[size];
           isActiveVal=new String[size];

           int col1 = c.getColumnIndex(Project_Name);
           int col2 = c.getColumnIndex(Project_Date_Created);
           int col3 = c.getColumnIndex(Project_End_Date);
           int col4 = c.getColumnIndex(Project_Is_Active);


           if (c != null) 
           {
              if( c.moveToFirst())
              {
               do {
                   nameVal[i]=c.getString(col1);
                   dateval[i]=c.getString(col2);
                   endDateVal[i]=c.getString(col3);
                   isActiveVal[i]=c.getString(col4);

                   //arrList.add(ageVal[i]+"");
                   //result=result+nameVal+" "+ageVal+" ";
                   System.out.println("Name     :"+nameVal[i]);
                   System.out.println("dateval      :"+dateval[i]);
                   System.out.println("endDateVal      :"+endDateVal[i]);
                   System.out.println("isActiveVal      :"+isActiveVal[i]);
                   i++;

               } while (c.moveToNext());

       //06-17 13:53:00.281: E/AndroidRuntime(14245): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0


               arrList.add(nameVal);
               arrList.add(dateval);
               arrList.add(endDateVal);
               arrList.add(isActiveVal);
           }

           }  
           db.close();
       }catch(SQLiteFullException exp) {
            exp.getMessage();
            Log.d("Exception Cause", exp.getMessage());
        }

       return arrList;

   }


Here is my activity code 


public class My_Project extends ExpandableListActivity 
{
    //ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    Button btnNewProject;
    Button btn_myprojectdefinemyteam;


    HashMap<String, List<String>> listDataChild;
    DBHelper databaseHelper;
    SQLiteDatabase db;
    Adapter adp;
    List dispDataList;
    String Strname;
    String Name;



    String[] data;
    String[] strProjectame;
    String[] strdateCreated;
    String[] strEndDate;
    String[] strIsActive;

    String[] dtrProjectNAmeSize;

   public static final String Project_Name = "project_name";
   public static final String Project_Date_Created = "project_date_created";
   public static final String Project_End_Date = "project_end_date";
   public static final String Project_Is_Active = "IsActive";

    ExpandableListAdapter mAdapter;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_project);

        databaseHelper = new DBHelper(getApplicationContext());
        dispDataList=databaseHelper.viewTable();


        dtrProjectNAmeSize=new String[dispDataList.size()];

        strProjectame=(String[])dispDataList.get(0);
        strdateCreated=(String[]) dispDataList.get(1);
        strEndDate = (String[])dispDataList.get(2);
        strIsActive = (String[])dispDataList.get(3);

        for(int i=0;i<strProjectame.length;i++)
        {
            System.out.println("New data :"+strProjectame[i]);
        }


        List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
        List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();

        for (int i = 0; i < strProjectame.length ; i++)
        {
            Map<String, String> curGroupMap = new HashMap<String, String>();
            groupData.add(curGroupMap);
            curGroupMap.put(Project_Name,"" +strProjectame[i]);

            List<Map<String, String>> children = new ArrayList<Map<String, String>>();

                Map<String, String> curChildMap = new HashMap<String, String>();
                children.add(curChildMap);
                curChildMap.put(Project_Date_Created,"" +strdateCreated[i]);
                curChildMap.put(Project_End_Date,"" +strEndDate[i]);
                curChildMap.put(Project_Is_Active,"" +strIsActive[i]);

          childData.add(children);

        }

        expListView = (ExpandableListView) findViewById(android.R.id.list);

        expListView.setOnGroupClickListener(new OnGroupClickListener()
        {
            @Override
                public boolean onGroupClick(ExpandableListView parent, View v,
                        int groupPosition, long id) 
                {
                    return false;
                }
            });


            expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

                @Override
                public void onGroupExpand(int groupPosition) {
                    Toast.makeText(getApplicationContext(),
                            dtrProjectNAmeSize.length + " Expanded",
                            Toast.LENGTH_SHORT).show();
                }
            });


            expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

                @Override
                public void onGroupCollapse(int groupPosition) {
                    Toast.makeText(getApplicationContext(),
                            dtrProjectNAmeSize.length + " Collapsed",
                            Toast.LENGTH_SHORT).show();
                }
            });





             mAdapter = new SimpleExpandableListAdapter(
                        this,
                        groupData,
                        R.layout.list_group,
                        new String[] { Project_Name },
                        new int[] {R.id.lblListHeader },
                        childData,
                        R.layout.child_item,
                        new String[] { Project_Date_Created , Project_End_Date , Project_Is_Active},
                        new int[] { R.id.TextView_Projectdetails , R.id.textOne , R.id.textTwo }
                        );

                expListView.setAdapter(mAdapter);  


                btnNewProject = (Button)findViewById(R.id.buttonmyproject_NewProject);
                btnNewProject.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent i = new Intent(My_Project.this , Add_Project.class);
                        startActivity(i);
                        finish();
                    }
                });


                btn_myprojectdefinemyteam = (Button)findViewById(R.id.buttonmyprojectdefinemyteam);
                btn_myprojectdefinemyteam.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent i =  new Intent(My_Project.this , Team_Member.class);
                        startActivity(i);
                        finish();

                    }
                });



    }

}

这是我的Log cat文本信息。

06-17 14:33:50.531: E/AndroidRuntime(17227): FATAL EXCEPTION: main
06-17 14:33:50.531: E/AndroidRuntime(17227): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sentaca.android.accordion/com.sentaca.android.accordion.My_Project}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.os.Looper.loop(Looper.java:123)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.app.ActivityThread.main(ActivityThread.java:3683)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at java.lang.reflect.Method.invokeNative(Native Method)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at java.lang.reflect.Method.invoke(Method.java:507)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at dalvik.system.NativeStart.main(Native Method)
06-17 14:33:50.531: E/AndroidRuntime(17227): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
06-17 14:33:50.531: E/AndroidRuntime(17227):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at java.util.ArrayList.get(ArrayList.java:311)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at com.sentaca.android.accordion.My_Project.onCreate(My_Project.java:69)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-17 14:33:50.531: E/AndroidRuntime(17227):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-17 14:33:50.531: E/AndroidRuntime(17227):    ... 11 more

您将得到java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0以下行的java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

dtrProjectNAmeSize=new String[dispDataList.size()];

strProjectame=(String[])dispDataList.get(0); // error happened here 
strdateCreated=(String[]) dispDataList.get(1);
strEndDate = (String[])dispDataList.get(2);
strIsActive = (String[])dispDataList.get(3);

因为dispDataList大小为0所以您无法获取该索引的任何索引,因此可以使用以下方式更改代码:

dtrProjectNAmeSize=new String[dispDataList.size()];

if ( dispDataList.size() > 3 )
{
     strProjectame=(String[])dispDataList.get(0);
     strdateCreated=(String[]) dispDataList.get(1);
     strEndDate = (String[])dispDataList.get(2);
     strIsActive = (String[])dispDataList.get(3);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM