2016-04-05 11 views
1

Ich verwende Cursor, um die Bilder aus der Galerie und alle Bilder aus der Galerie zu bekommen, gibt es eine Möglichkeit, nur einige der letzten Bilder, wie die letzten 20 Bild erfasst.Erhalten der letzten Bilder aus der Galerie von Cursor mit ContentResolver

Ein weiteres Problem, ich bin konfrontiert ist, sind die Bilder von älteren auf neue Reihenfolge kommen, möchte ich das Bild in umgekehrter Reihenfolge (neu zu älteren).

final String[] columns = { MediaStore.Images.Media.DATA, 
       MediaStore.Images.Media._ID }; 
final String orderBy = MediaStore.Images.Media._ID; 

Mein Code-Bild zu erhalten:

public void getImg(){ 
    Cursor imagecursor = getContentResolver().query(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, 
      null, orderBy); 

    int image_column_index = imagecursor 
      .getColumnIndex(MediaStore.Images.Media._ID); 
    this.count = imagecursor.getCount(); 
    this.thumbnails = new Bitmap[this.count]; 
    this.arrPath = new String[this.count]; 
    this.thumbnailsselection = new boolean[this.count]; 
    for (int i = 0; i < this.count; i++) { 
     imagecursor.moveToPosition(i); 
     int id = imagecursor.getInt(image_column_index); 
     int dataColumnIndex = imagecursor 
       .getColumnIndex(MediaStore.Images.Media.DATA); 
     thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
       getApplicationContext().getContentResolver(), id, 
       MediaStore.Images.Thumbnails.MICRO_KIND, null); 
     arrPath[i] = imagecursor.getString(dataColumnIndex); 
    } 
    GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
    imageAdapter = new ImageAdapter(); 
    imagegrid.setAdapter(imageAdapter); 
    imagecursor.close(); 
} 

Mein Adapter:

public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 

    public ImageAdapter() { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public int getCount() { 
     return count; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(R.layout.galleryitem, null); 
      holder.imageview = (ImageView) convertView 
        .findViewById(R.id.thumbImage); 
      holder.checkbox = (CheckBox) convertView 
        .findViewById(R.id.itemCheckBox); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.checkbox.setId(position); 
     holder.imageview.setId(position); 
     holder.checkbox.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       CheckBox cb = (CheckBox) v; 
       int id = cb.getId(); 
       if (thumbnailsselection[id]) { 
        cb.setChecked(false); 
        thumbnailsselection[id] = false; 
       } else { 
        cb.setChecked(true); 
        thumbnailsselection[id] = true; 
       } 
      } 
     }); 

     holder.imageview.setImageBitmap(thumbnails[position]); 
     holder.checkbox.setChecked(thumbnailsselection[position]); 
     holder.id = position; 
     return convertView; 
    } 
} 

class ViewHolder { 
    ImageView imageview; 
    CheckBox checkbox; 
    int id; 
} 
+0

https://github.com/amirarcan e/recent-images –

+0

Danke Mann, ich werde das überprüfen :) – HAXM

Antwort

2

Die Reihenfolge der durch das Argument zu query(), pro Dokumentation als SQL ORDER BY-Anweisung formatiert ist. Wenn Sie die Werte in absteigender Reihenfolge wollen in Bezug auf die Standard aufsteigende Reihenfolge entgegengesetzt, dies tun:

final String orderBy = MediaStore.Images.Media._ID + " DESC"; 

Aber Sie speziell über die Verwendung des Datums als der Bestellung gefragt, so sollten Sie dieses stattdessen:

final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC"; 
+0

Dank Mann können Sie eine Lösung geben, um nur 20 kürzlich aufgenommene Bilder vom Cursor zu bekommen, als mein Hauptproblem ist, nur ein paar Bilder zu bekommen, wenn ich viel habe von Bildern in der Galerie die App gehen langsam someones, ich denke, die Anfrage für nur fiew Bilder wird die Latenz verhindern – HAXM

+0

http://stackoverflow.com/questions/12640480/specifying-limit-offset-for-contentprovider-abfragen –

+0

Ich versuchte zu verwenden es, aber wenn ich verwenden werde, dass ich OrderBy entfernen muss und meine APP stürzt, um es zu benutzen, wird jede bessere Lösung geschätzt. – HAXM

1

Neben Doug Antwort, wenn Sie nur die letzten 20 mit dem orderBy wollen, können Sie das tun:

final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC LIMIT 20";

+0

Vielen Dank für Ihren Beitrag – HAXM