[Android] [PATCH] Check if returned cursors are not null

Geoffrey Métais geoffrey.metais at gmail.com
Mon Jul 6 14:52:23 CEST 2015


LGTM

On Mon, Jul 6, 2015 at 1:30 PM Thomas Guillem <thomas at gllm.fr> wrote:

> ---
>  .../src/org/videolan/vlc/MediaDatabase.java        | 283
> ++++++++++++---------
>  .../vlc/gui/video/VideoPlayerActivity.java         |  13 +-
>  vlc-android/src/org/videolan/vlc/util/Util.java    |   2 +-
>  3 files changed, 168 insertions(+), 130 deletions(-)
>
> diff --git a/vlc-android/src/org/videolan/vlc/MediaDatabase.java
> b/vlc-android/src/org/videolan/vlc/MediaDatabase.java
> index b5cc3de..082bbe1 100644
> --- a/vlc-android/src/org/videolan/vlc/MediaDatabase.java
> +++ b/vlc-android/src/org/videolan/vlc/MediaDatabase.java
> @@ -362,9 +362,11 @@ public class MediaDatabase {
>                  new String[] { PLAYLIST_NAME },
>                  null, null, null, null, null);
>
> -        while(c.moveToNext())
> -            playlists.add(c.getString(c.getColumnIndex(PLAYLIST_NAME)));
> -        c.close();
> +        if (c != null) {
> +            while (c.moveToNext())
> +
> playlists.add(c.getString(c.getColumnIndex(PLAYLIST_NAME)));
> +            c.close();
> +        }
>          return playlists.toArray(new String[playlists.size()]);
>      }
>
> @@ -413,9 +415,12 @@ public class MediaDatabase {
>          Cursor c = mDb.query(PLAYLIST_TABLE_NAME,
>                  new String[] { PLAYLIST_NAME }, PLAYLIST_NAME + "= ?",
>                  new String[] { name }, null, null, "1");
> -        int count = c.getCount();
> -        c.close();
> -        return (count > 0);
> +        if (c != null) {
> +            final int count = c.getCount();
> +            c.close();
> +            return (count > 0);
> +        } else
> +            return false;
>      }
>
>     /**
> @@ -436,14 +441,18 @@ public class MediaDatabase {
>                  new String[] { playlistName }, null, null,
>                  PLAYLIST_MEDIA_ORDER + " ASC");
>
> -        int count = c.getCount();
> -        String ret[] = new String[count]; int i = 0;
> -        while(c.moveToNext()) {
> -            ret[i] =
> c.getString(c.getColumnIndex(PLAYLIST_MEDIA_MEDIALOCATION));
> -            i++;
> -        }
> -        c.close();
> -        return ret;
> +        if (c != null) {
> +            int count = c.getCount();
> +            String ret[] = new String[count];
> +            int i = 0;
> +            while (c.moveToNext()) {
> +                ret[i] =
> c.getString(c.getColumnIndex(PLAYLIST_MEDIA_MEDIALOCATION));
> +                i++;
> +            }
> +            c.close();
> +            return ret;
> +        } else
> +            return null;
>      }
>
>      /**
> @@ -492,15 +501,17 @@ public class MediaDatabase {
>                  new String[] { playlistName, String.valueOf(position) },
>                  null, null,
>                  PLAYLIST_MEDIA_ORDER + " ASC");
> -        while(c.moveToNext()) {
> -            ContentValues cv = new ContentValues();
> -            int ii = c.getInt(c.getColumnIndex(PLAYLIST_MEDIA_ORDER)) +
> factor;
> -            Log.d(TAG, "ii = " + ii);
> -            cv.put(PLAYLIST_MEDIA_ORDER, ii /* i */);
> -            mDb.update(PLAYLIST_MEDIA_TABLE_NAME, cv, PLAYLIST_MEDIA_ID +
> "=?",
> -                    new String[] {
> c.getString(c.getColumnIndex(PLAYLIST_MEDIA_ID)) });
> +        if (c != null) {
> +            while (c.moveToNext()) {
> +                ContentValues cv = new ContentValues();
> +                int ii = c.getInt(c.getColumnIndex(PLAYLIST_MEDIA_ORDER))
> + factor;
> +                Log.d(TAG, "ii = " + ii);
> +                cv.put(PLAYLIST_MEDIA_ORDER, ii /* i */);
> +                mDb.update(PLAYLIST_MEDIA_TABLE_NAME, cv,
> PLAYLIST_MEDIA_ID + "=?",
> +                        new
> String[]{c.getString(c.getColumnIndex(PLAYLIST_MEDIA_ID))});
> +            }
> +            c.close();
>          }
> -        c.close();
>      }
>
>      /**
> @@ -595,9 +606,12 @@ public class MediaDatabase {
>                      MEDIA_LOCATION + "=?",
>                      new String[] { uri.toString() },
>                      null, null, null);
> -            boolean exists = cursor.moveToFirst();
> -            cursor.close();
> -            return exists;
> +            if (cursor != null) {
> +                final boolean exists = cursor.moveToFirst();
> +                cursor.close();
> +                return exists;
> +            } else
> +                return false;
>          } catch (Exception e) {
>              Log.e(TAG, "Query failed");
>              return false;
> @@ -618,14 +632,16 @@ public class MediaDatabase {
>                  MEDIA_TABLE_NAME,
>                  new String[] { MEDIA_LOCATION },
>                  null, null, null, null, null);
> -        cursor.moveToFirst();
> -        if (!cursor.isAfterLast()) {
> -            do {
> -                File file = new File(cursor.getString(0));
> -                files.add(file);
> -            } while (cursor.moveToNext());
> +        if (cursor != null) {
> +            cursor.moveToFirst();
> +            if (!cursor.isAfterLast()) {
> +                do {
> +                    File file = new File(cursor.getString(0));
> +                    files.add(file);
> +                } while (cursor.moveToNext());
> +            }
> +            cursor.close();
>          }
> -        cursor.close();
>
>          return files;
>      }
> @@ -640,12 +656,14 @@ public class MediaDatabase {
>
>          ArrayList<String> mediaList = new ArrayList<String>();
>          Cursor cursor = queryMedia(filter);
> -        if (cursor.moveToFirst()){
> -            do {
> -                mediaList.add(cursor.getString(0));
> -            } while (cursor.moveToNext());
> +        if (cursor != null) {
> +            if (cursor.moveToFirst()) {
> +                do {
> +                    mediaList.add(cursor.getString(0));
> +                } while (cursor.moveToNext());
> +            }
> +            cursor.close();
>          }
> -        cursor.close();
>          return mediaList;
>      }
>
> @@ -681,36 +699,39 @@ public class MediaDatabase {
>                      CHUNK_SIZE,
>                      chunk_count * CHUNK_SIZE), null);
>
> -            if (cursor.moveToFirst()) {
> -                try {
> -                    do {
> -                        final Uri uri =
> AndroidUtil.LocationToUri(cursor.getString(0));
> -                        MediaWrapper media = new MediaWrapper(uri,
> -                                cursor.getLong(1),      // MEDIA_TIME
> -                                cursor.getLong(2),      // MEDIA_LENGTH
> -                                cursor.getInt(3),       // MEDIA_TYPE
> -                                null,                   // MEDIA_PICTURE
> -                                cursor.getString(4),    // MEDIA_TITLE
> -                                cursor.getString(5),    // MEDIA_ARTIST
> -                                cursor.getString(6),    // MEDIA_GENRE
> -                                cursor.getString(7),    // MEDIA_ALBUM
> -                                cursor.getString(8),    //
> MEDIA_ALBUMARTIST
> -                                cursor.getInt(9),       // MEDIA_WIDTH
> -                                cursor.getInt(10),       // MEDIA_HEIGHT
> -                                cursor.getString(11),   //
> MEDIA_ARTWORKURL
> -                                cursor.getInt(12),      //
> MEDIA_AUDIOTRACK
> -                                cursor.getInt(13),      // MEDIA_SPUTRACK
> -                                cursor.getInt(14),      //
> MEDIA_TRACKNUMBER
> -                                cursor.getInt(15),     // MEDIA_DISCNUMBER
> -                                cursor.getLong(16));     //
> MEDIA_LAST_MODIFIED
> -                        medias.put(media.getUri().toString(), media);
> +            if (cursor != null) {
> +                if (cursor.moveToFirst()) {
> +                    try {
> +                        do {
> +                            final Uri uri =
> AndroidUtil.LocationToUri(cursor.getString(0));
> +                            MediaWrapper media = new MediaWrapper(uri,
> +                                    cursor.getLong(1),      // MEDIA_TIME
> +                                    cursor.getLong(2),      //
> MEDIA_LENGTH
> +                                    cursor.getInt(3),       // MEDIA_TYPE
> +                                    null,                   //
> MEDIA_PICTURE
> +                                    cursor.getString(4),    // MEDIA_TITLE
> +                                    cursor.getString(5),    //
> MEDIA_ARTIST
> +                                    cursor.getString(6),    // MEDIA_GENRE
> +                                    cursor.getString(7),    // MEDIA_ALBUM
> +                                    cursor.getString(8),    //
> MEDIA_ALBUMARTIST
> +                                    cursor.getInt(9),       // MEDIA_WIDTH
> +                                    cursor.getInt(10),       //
> MEDIA_HEIGHT
> +                                    cursor.getString(11),   //
> MEDIA_ARTWORKURL
> +                                    cursor.getInt(12),      //
> MEDIA_AUDIOTRACK
> +                                    cursor.getInt(13),      //
> MEDIA_SPUTRACK
> +                                    cursor.getInt(14),      //
> MEDIA_TRACKNUMBER
> +                                    cursor.getInt(15),     //
> MEDIA_DISCNUMBER
> +                                    cursor.getLong(16));     //
> MEDIA_LAST_MODIFIED
> +                            medias.put(media.getUri().toString(), media);
> +
> +                            count++;
> +                        } while (cursor.moveToNext());
> +                    } catch (IllegalStateException e) {
> +                    } //Google bug causing IllegalStateException, see
> https://code.google.com/p/android/issues/detail?id=32472
> +                }
>
> -                        count++;
> -                    } while (cursor.moveToNext());
> -                } catch (IllegalStateException e) {} //Google bug causing
> IllegalStateException, see
> https://code.google.com/p/android/issues/detail?id=32472
> +                cursor.close();
>              }
> -
> -            cursor.close();
>              chunk_count++;
>          } while (count == CHUNK_SIZE);
>
> @@ -736,16 +757,18 @@ public class MediaDatabase {
>                      CHUNK_SIZE,
>                      chunk_count * CHUNK_SIZE), null);
>
> -            if (cursor.moveToFirst()) {
> -                do {
> -                    String location = cursor.getString(0);
> -                    long time = cursor.getLong(1);
> -                    times.put(location, time);
> -                    count++;
> -                } while (cursor.moveToNext());
> -            }
> +            if (cursor != null) {
> +                if (cursor.moveToFirst()) {
> +                    do {
> +                        String location = cursor.getString(0);
> +                        long time = cursor.getLong(1);
> +                        times.put(location, time);
> +                        count++;
> +                    } while (cursor.moveToNext());
> +                }
>
> -            cursor.close();
> +                cursor.close();
> +            }
>              chunk_count++;
>          } while (count == CHUNK_SIZE);
>
> @@ -785,27 +808,29 @@ public class MediaDatabase {
>              // java.lang.IllegalArgumentException: the bind value at
> index 1 is null
>              return null;
>          }
> -        if (cursor.moveToFirst()) {
> -            media = new MediaWrapper(uri,
> -                    cursor.getLong(0),
> -                    cursor.getLong(1),
> -                    cursor.getInt(2),
> -                    null, // lazy loading, see getPicture()
> -                    cursor.getString(3),
> -                    cursor.getString(4),
> -                    cursor.getString(5),
> -                    cursor.getString(6),
> -                    cursor.getString(7),
> -                    cursor.getInt(8),
> -                    cursor.getInt(9),
> -                    cursor.getString(10),
> -                    cursor.getInt(11),
> -                    cursor.getInt(12),
> -                    cursor.getInt(13),
> -                    cursor.getInt(14),
> -                    cursor.getLong(15));
> +        if (cursor != null) {
> +            if (cursor.moveToFirst()) {
> +                media = new MediaWrapper(uri,
> +                        cursor.getLong(0),
> +                        cursor.getLong(1),
> +                        cursor.getInt(2),
> +                        null, // lazy loading, see getPicture()
> +                        cursor.getString(3),
> +                        cursor.getString(4),
> +                        cursor.getString(5),
> +                        cursor.getString(6),
> +                        cursor.getString(7),
> +                        cursor.getInt(8),
> +                        cursor.getInt(9),
> +                        cursor.getString(10),
> +                        cursor.getInt(11),
> +                        cursor.getInt(12),
> +                        cursor.getInt(13),
> +                        cursor.getInt(14),
> +                        cursor.getLong(15));
> +            }
> +            cursor.close();
>          }
> -        cursor.close();
>          return media;
>      }
>
> @@ -821,19 +846,21 @@ public class MediaDatabase {
>                  MEDIA_LOCATION + "=?",
>                  new String[] { uri.toString() },
>                  null, null, null);
> -        if (cursor.moveToFirst()) {
> -            blob = cursor.getBlob(0);
> -            if (blob != null && blob.length > 1 && blob.length < 500000) {
> -                try {
> -                    picture = BitmapFactory.decodeByteArray(blob, 0,
> blob.length);
> -                } catch(OutOfMemoryError e) {
> -                    picture = null;
> -                } finally {
> -                    blob = null;
> +        if (cursor != null) {
> +            if (cursor.moveToFirst()) {
> +                blob = cursor.getBlob(0);
> +                if (blob != null && blob.length > 1 && blob.length <
> 500000) {
> +                    try {
> +                        picture = BitmapFactory.decodeByteArray(blob, 0,
> blob.length);
> +                    } catch (OutOfMemoryError e) {
> +                        picture = null;
> +                    } finally {
> +                        blob = null;
> +                    }
>                  }
>              }
> +            cursor.close();
>          }
> -        cursor.close();
>          return picture;
>      }
>
> @@ -951,14 +978,16 @@ public class MediaDatabase {
>                  DIR_TABLE_NAME,
>                  new String[] { DIR_ROW_PATH },
>                  null, null, null, null, null);
> -        cursor.moveToFirst();
> -        if (!cursor.isAfterLast()) {
> -            do {
> -                File dir = new File(cursor.getString(0));
> -                paths.add(dir);
> -            } while (cursor.moveToNext());
> +        if (cursor != null) {
> +            cursor.moveToFirst();
> +            if (!cursor.isAfterLast()) {
> +                do {
> +                    File dir = new File(cursor.getString(0));
> +                    paths.add(dir);
> +                } while (cursor.moveToNext());
> +            }
> +            cursor.close();
>          }
> -        cursor.close();
>
>          return paths;
>      }
> @@ -1030,10 +1059,12 @@ public class MediaDatabase {
>                  MRL_DATE + " DESC",
>                  MRL_TABLE_SIZE);
>
> -        while (cursor.moveToNext()) {
> -            history.add(cursor.getString(0));
> +        if (cursor != null) {
> +            while (cursor.moveToNext()) {
> +                history.add(cursor.getString(0));
> +            }
> +            cursor.close();
>          }
> -        cursor.close();
>
>          return history;
>      }
> @@ -1060,9 +1091,12 @@ public class MediaDatabase {
>                  NETWORK_FAV_URI + "=?",
>                  new String[] { uri.toString() },
>                  null, null, null);
> -        boolean exists = cursor.moveToFirst();
> -        cursor.close();
> -        return exists;
> +        if (cursor != null) {
> +            final boolean exists = cursor.moveToFirst();
> +            cursor.close();
> +            return exists;
> +        } else
> +            return false;
>      }
>
>      public synchronized ArrayList<MediaWrapper> getAllNetworkFav() {
> @@ -1072,14 +1106,15 @@ public class MediaDatabase {
>          Cursor cursor = mDb.query(NETWORK_FAV_TABLE_NAME,
>                  new String[] { NETWORK_FAV_URI , NETWORK_FAV_TITLE},
>                  null, null, null, null, null);
> -
> -        while (cursor.moveToNext()) {
> -            mw = new MediaWrapper(Uri.parse(cursor.getString(0)));
> -            mw.setTitle(Uri.decode(cursor.getString(1)));
> -            mw.setType(MediaWrapper.TYPE_DIR);
> -            favs.add(mw);
> +        if (cursor != null) {
> +            while (cursor.moveToNext()) {
> +                mw = new MediaWrapper(Uri.parse(cursor.getString(0)));
> +                mw.setTitle(Uri.decode(cursor.getString(1)));
> +                mw.setType(MediaWrapper.TYPE_DIR);
> +                favs.add(mw);
> +            }
> +            cursor.close();
>          }
> -        cursor.close();
>
>          return favs;
>      }
> diff --git
> a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> index a1f26a0..0bcfc30 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> @@ -117,6 +117,7 @@ import org.videolan.vlc.widget.OnRepeatListener;
>
>  import java.io.ByteArrayInputStream;
>  import java.io.ByteArrayOutputStream;
> +import java.io.FileInputStream;
>  import java.io.FileNotFoundException;
>  import java.io.FileOutputStream;
>  import java.io.IOException;
> @@ -2506,11 +2507,13 @@ public class VideoPlayerActivity extends
> AppCompatActivity implements IVLCVout.C
>
>                          Cursor returnCursor =
>                                  getContentResolver().query(data, null,
> null, null, null);
> -                        if (returnCursor != null &&
> returnCursor.getCount() > 0) {
> -                            int nameIndex =
> returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
> -                            if (nameIndex > -1) {
> -                                returnCursor.moveToFirst();
> -                                title = returnCursor.getString(nameIndex);
> +                        if (returnCursor != null) {
> +                            if (returnCursor.getCount() > 0) {
> +                                int nameIndex =
> returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
> +                                if (nameIndex > -1) {
> +                                    returnCursor.moveToFirst();
> +                                    title =
> returnCursor.getString(nameIndex);
> +                                }
>                              }
>                              returnCursor.close();
>                          }
> diff --git a/vlc-android/src/org/videolan/vlc/util/Util.java
> b/vlc-android/src/org/videolan/vlc/util/Util.java
> index 8bee66e..26694a6 100644
> --- a/vlc-android/src/org/videolan/vlc/util/Util.java
> +++ b/vlc-android/src/org/videolan/vlc/util/Util.java
> @@ -358,7 +358,7 @@ public class Util {
>                  return false;
>              }
>          } else {
> -                return false;
> +            return false;
>          }
>      }
>
> --
> 2.1.4
>
> _______________________________________________
> Android mailing list
> Android at videolan.org
> https://mailman.videolan.org/listinfo/android
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/android/attachments/20150706/873a628d/attachment-0001.html>


More information about the Android mailing list