2013-05-02 70 views
0

这是我的代码运行完美,如果directry包含任何图像,但如果目录不包含图像(0)代码将爆炸并显示java.lang.ArrayIndexOutOfBoundsException错误什么是ido?我如何加载空白或null GridView? 这是我的显示图像http://tinypic.com/view.php?pic=2zyda9f&s=5当我点击照片(3)是工作时,我点击你好(0)代码将爆炸显示日志错误消息 java.lang.ArrayIndexOutOfBoundsException。android我的代码显示数组索引超出界限的错误

GridView gridView; 
    TextView textView; 
File currentParent; 
File[] currentFiles; 
String[] currentFilePath; 
boolean CheckArr[]; 
File root1; 
LinearLayout ll; 
String filePath; 
String PhotosFolder = "Photos Folders"; 

SimpleAdapter simpleAdapter; 

List<ImageData> imList; 

Button del; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

del = (Button) findViewById(R.id.canceles); 
del.setOnClickListener(new OnClickListener() {  
    @Override 
    public void onClick(View arg0) { 

     for(int i=0;i<CheckArr.length;i++) 
     { 
      if(CheckArr[i] == true) 
      { 

        File file = new 
    File(imList.get(i).getImgPath()); 
        file.delete(); 
      } 
     } 


     inflateListView(currentFiles); 
    } 
}); 


ll = (LinearLayout) findViewById(R.id.linearlayout1); 
viewLoad = LayoutInflater.from(FileGridActivity.this).inflate(
     R.layout.main, null); 
AddPictures = (ImageButton) findViewById(R.id.add_privacy_contact); 

    Addfolder = (Button) findViewById(R.id.Addfolder); 

textView = (TextView) findViewById(R.id.title_name); 
File photos = new File(getFilesDir(), "Photos"); 
photos.mkdirs(); 

root1 = new File("/data/data/com.myexample/files/"); 

currentParent = root1; 
currentFiles = root1.listFiles(); 


currentFilePath = new String[currentFiles.length]; 
int count = 0; 

for (File f : currentFiles) { 
    currentFilePath[count] = f.getAbsolutePath(); 
    count++; 

} 

gridView = (GridView) findViewById(R.id.grid); 
gridView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

     if (currentFiles[position].isDirectory()) { 


      root = new File("/data/data/com.myexample/files/"+ 
     FileName(currentFilePath[position]) + "/"); 

      currentFiles = root.listFiles(); 
      inflateListView(currentFiles); 
     } else if (currentFiles[position].isFile()) { 
      openFile(currentFiles[position]); 

      // gridposition = currentFiles[(int) id]); 

     }   } 
    }); 


      private void inflateListView(File[] files) { 

imList = new ArrayList<ImageData>(); 
ImageData imObj; 

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

boolean check; 

for (int i = 0; i < files.length; i++) { 
    Map<String, Object> listItem = new HashMap<String, Object>(); 





    if (files[i].isDirectory()) { 





     listItem.put("icon", R.drawable.folder); 
     listItem.put("fileName",files[i].getName() + "(" + 
    files[i].list().length + ")"); 

     listItems.add(listItem); 

     simpleAdapter = new SimpleAdapter(this, listItems, 
    R.layout.line,new String[] { "icon", "fileName" }, new int[] { 
     R.id.icon,R.id.file_name }); 
    // gridView.invalidateViews(); 
     gridView.setAdapter(simpleAdapter); 

    // simpleAdapter.notifyDataSetChanged(); 

     check = false; 
    } 
    else 
    { 
     check = true; 
     imObj = new ImageData(); 




     listItem.put("icon", files[i]); 

     listItems.add(listItem); 

     imObj.setImgPath(files[i].toString()); 

     imList.add(imObj); 

     } 


    if(check == true) 
    { 
     imageAdapter = new   


     ImagesAdapter(getApplicationContext(),FileGridActivity.this,0,imList);  
     gridView.setAdapter(imageAdapter); 
     imageAdapter.notifyDataSetChanged(); 
    } 
} 



    } 

    public class ImagesAdapter extends ArrayAdapter<ImageData> { 

private LayoutInflater mInflater; 

List<ImageData> listItems; 

public ImagesAdapter(Context context,Activity activity, int 
    textViewResourceId, List<ImageData> items) { 
     super(context, textViewResourceId, items); 
     this.listItems = items; 
     mInflater = LayoutInflater.from(context); 

     CheckArr = new boolean[items.size()]; 

     for(int z = 0; z<CheckArr.length;z++) 
      CheckArr[z] = false; 
} 

public class ViewHolder{ 

     public CheckBox checkbox; 
     public ImageView imageview; 

} 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     ViewHolder holder; 

      vi = mInflater.inflate(R.layout.galleryitem, null); 


      ImageData o = listItems.get(position); 

      if(o != null){ 
       holder = new ViewHolder(); 

       holder.imageview = (ImageView) 
    vi.findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) 
vi.findViewById(R.id.itemCheckBox); 

       File f = new 
    File(listItems.get(position).getImgPath()); 
       holder.imageview.setImageBitmap(decodeFile(f)); 

       holder.checkbox.setId(position); 
       holder.imageview.setId(position); 

       holder.checkbox.setOnCheckedChangeListener(new 
    OnCheckedChangeListener() {     
        public void 
    onCheckedChanged(CompoundButton arg0, boolean arg1) { 
         // TODO Auto-generated 
method stub 
         Log.e("id",arg0.getId()+" 
    "); 
         Log.e("bool",arg1+ " "); 

         CheckArr[arg0.getId()] = 
    arg1; 

        } 
       }); 

      } 

     return vi; 

    } 
+0

PLZ也有问题,添加日志,如果应用程序崩溃。 – 2013-05-02 08:43:53

+0

哇......只需缩进你的代码。务必确保在eclipse中使用Ctrl + Shift + F进行缩进。 – 2013-05-02 08:44:01

+0

好吧,不好意思,请告诉我,我该怎么办?为什么我的代码崩溃如果目录包含(0)元素? – 2013-05-02 08:46:07

回答

0

根据我的理解,您尝试访问不存在的索引。

很简单

只是检查

在ArrayList中

yourarray.size(); 

或 情况下,阵列

yourarray.length; 

的情况下,如果此方法返回一个值大于0,则执行:

photos(3); //whatever code you are using to retrieve data from the array 

事情是这样的:

if(yourArray.getCount()>0){ 

//fetch the required data 

} 
else{ 

Log.v("TAG ","No data"); 

} 
+0

其中u写这个代码??从哪里把这个代码 – 2013-05-02 09:16:47

+0

?????? – 2013-05-02 09:18:00