1

Я пытаюсь создать приложение, которое создает изображения в папке в SDCard и отображает их (папка «MyCreatedImages», которая теперь отображается в галерее), и теперь я пытаюсь загрузить все изображения из данной папки в макете gridview. Я использую следующий код, однако я продолжаю получать NPE по причинам, которые я не могу понять.Загрузить изображение из специальной папки SDCard в GridView

И мой Gridview адаптер:

private class ImageAdapter extends BaseAdapter { 
    private Context context; 

    public ImageAdapter(Context localContext) { 
     context = localContext; 
    } 

    public int getCount() { 
     return cursor.getCount(); 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView picturesView; 
     if (convertView == null) { 
      picturesView = new ImageView(context); 
      // Move cursor to current position 
      cursor.moveToPosition(position); 
      // Get the current value for the requested column 
      int imageID = cursor.getInt(columnIndex); 
      // Set the content of the image based on the provided URI 
      picturesView.setImageURI(Uri.withAppendedPath(
        MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
        "" + imageID)); 
      picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      picturesView.setPadding(8, 8, 8, 8); 
      picturesView 
        .setLayoutParams(new GridView.LayoutParams(100, 100)); 
     } else { 
      picturesView = (ImageView) convertView; 
     } 
     return picturesView; 
    } 
} 

При открытии этого фрагмента я получаю следующие ошибки LogCat:

09-23 16:25:06.286: E/AndroidRuntime(28497): FATAL EXCEPTION: main 
09-23 16:25:06.286: E/AndroidRuntime(28497): java.lang.NullPointerException 
09-23 16:25:06.286: E/AndroidRuntime(28497): at com.meme.hdmeme.MyMemeFragment.onCreateView(MyMemeFragment.java:51) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.os.Handler.handleCallback(Handler.java:615) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.os.Looper.loop(Looper.java:137) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at android.app.ActivityThread.main(ActivityThread.java:4921) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at java.lang.reflect.Method.invokeNative(Native Method) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at java.lang.reflect.Method.invoke(Method.java:511) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
09-23 16:25:06.286: E/AndroidRuntime(28497): at dalvik.system.NativeStart.main(Native Method) 

Line 51:

columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 
+0

сделать некоторые журнал, проверьте ColumnIndex .. и т.д –

ответ

4

Попробуйте это функция для получения изображения с SD-карты:

ArrayList<String> f = new ArrayList<String>(); // list of available files in path 
    File[] listFile; 

    public void getSdcardImages() 
    { 
File file= new File(android.os.Environment.getExternalStorageDirectory(),"MyFolder"); 

    if (file.isDirectory()) 
    { 
     listFile = file.listFiles(); 


     for (int i = 0; i < listFile.length; i++) 
     { 

      f.add(listFile[i].getAbsolutePath()); 

     } 
    } 
} 

использование разрешение:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

затем установить в табличном виде с помощью адаптера:

GridView imggrid = (GridView) findViewById(R.id.imgGrid); 
imgAdapter = new ImageAdapter(); 
imggrid .setAdapter(imgAdapter); 

Комплект адаптера ниже:

public class ImageAdapter extends BaseAdapter { 
private LayoutInflater mInflater; 

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

public int getCount() { 
    return f.size(); 
} 

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.gallery, null); 
     holder.imageview = (ImageView) convertView.findViewById(R.id.thumb); 

     convertView.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


    Bitmap myBitmap = BitmapFactory.decodeFile(f.get(position)); 
    holder.imageview.setImageBitmap(myBitmap); 
    return convertView; 
    } 
} 

class ViewHolder { 
    ImageView imageview; 


} 
Смежные вопросы