2013-07-09 91 views
1

我有一个活动,用户可以从spinners中填写。但如果用户没有填写任何这个微调,然后点击保存按钮,AlertDialog必须显示。CursorIndexOutOfBoundsException索引0请求,在Android中的大小为0

但是,它不是我所期望的。当我点击保存按钮,它显示了一个错误:“CursorIndexOutOfBoundsException指数0请求,大小为0

我怎样才能解决这种类型的错误?

DatabaseHandler.java

public Cursor getReport_DistrictCode(String district) 
{ 
    SQLiteDatabase dbSqlite = this.getReadableDatabase(); 
    Cursor c = dbSqlite.query(Constants.TABLE_DISTRICT, new String[] 
      {Constants.DISTRICT_ID, Constants.DISTRICT_CODE,Constants.DISTRICT_NAME,Constants.DISTRICT_DESCRIPTION}, 
      Constants.DISTRICT_NAME+" = ?" , new String[]{district}, null, null, null); 
    if (c != null) { 
     c.moveToFirst(); 
    } 
    dbSqlite.close(); 
    return c; 
} 

MainActivity.java

spn_District.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
     public void onItemSelected(AdapterView<?> parentView, View SelectedItem, int position, long id) 
     { 
      int rowid = (int)parentView.getItemIdAtPosition(position); 
      int districtId = rowid; 
      if(districtId == 0) 
      { 
       List<String> Province = new ArrayList<String>(); 
       ArrayAdapter<String> adapter= new ArrayAdapter<String>(S_10th_IReportMain.this, android.R.layout.simple_spinner_item, Province); 
       spn_Province.setAdapter(adapter); 

      } 

      List<String> Province = databaseHandler.setItemOnProvinceSpinner(districtId); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(S_10th_IReportMain.this, R.layout.spinnerattributecell, Province) { 
       public View getView(int position, View convertView, ViewGroup parent) 
       { 
        View v = super.getView(position, convertView, parent); 

        Typeface externalFont=Typeface.createFromAsset(getAssets(), "Gothic_Regular.TTF"); 
        ((TextView) v).setTypeface(externalFont); 

        return v; 
       } 

       public View getDropDownView(int position, View convertView, ViewGroup parent) { 
         View v =super.getDropDownView(position, convertView, parent); 

        Typeface externalFont=Typeface.createFromAsset(getAssets(), "Gothic_Regular.TTF"); 
        ((TextView) v).setTypeface(externalFont); 

        return v; 
       } 
      }; 
      adapter.setDropDownViewResource(R.layout.spinnerdropdownitem); 
      spn_Province.setAdapter(adapter); 

     } 
     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 

     } 

    }); 

我的CursorAdapter的执行情况MainActivity.java

String District = spn_District.getSelectedItem().toString(); 
Cursor rDistrict = databaseHandler.getReport_DistrictCode(District); 
String DistrictCode = rDistrict.getString(rDistrict.getColumnIndex(Constants.DISTRICT_CODE)); 
+0

你可以给你的执行中的CursorAdapter? –

+0

嗨@KapilVats,这是最后附上的代码 – androidBoomer

+0

哪条线你得到这个错误 –

回答

2

请祛瘀E本从getReport_DistrictCode

if (c != null) { 
     c.moveToFirst(); 
    } 

而是只返回光标,然后Cursor rDistrict = databaseHandler.getReport_DistrictCode(District);后,而不是做一个空检查,添加此检查if(rDistrict.moveToFirst()){ // add your logic}

+0

你能特别在最后一段中给出明确的答案吗? – androidBoomer

+0

游标对象永远不会等于null,但它可以是空的(有0行)。如果你需要检查,你可以使用if(cursor.getCount()> 0)。你的代码失败了,因为你认为这是因为你的空检查已经到位,光标不会为空。 –

相关问题