在GridView

时间:2016-08-09 16:05:38

标签: android gridview android-sdcard

我做了一个小应用程序,它可以读取SD卡中的图像并在GridView中显示它们。

问题是我尝试在我拥有的两部手机上运行应用程序,一部运行Android 4.1.2,另一部运行Android 5.0.2。

它在4.1.2的手机上运行正常,但是另一个则崩溃了 它也没有在模拟器上运行。

我不知道为什么。

这是我的Gallery.java文件

public class Gallery extends AppCompatActivity {

    GridView gv;
    ArrayList<File> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        list= imageReader(Environment.getExternalStorageDirectory() );

        gv= (GridView) findViewById(R.id.gridView );
        gv.setAdapter(new GridAdapter());

        gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                startActivity(new Intent(getApplicationContext(),ViewImage.class ).putExtra("img",list.get(position ).toString() ));

            }
        });
    }

    class GridAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return list.size() ;
        }

        @Override
        public Object getItem(int position) {
            return list.get(position ) ;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            convertView = getLayoutInflater().inflate(R.layout.single_grid, parent, false );
            ImageView iv = (ImageView) convertView.findViewById(R.id.imageView);

            iv.setImageURI(Uri.parse( getItem(position).toString()) );

            return convertView ;
        }
    }

    ArrayList<File> imageReader(File root){
        ArrayList<File> a = new ArrayList<>() ;
        File[] files = root.listFiles() ;
        for(int i=0; i<files.length ; i++)
        {
            if(files[i].isDirectory() ){
                a.addAll(imageReader(files[i]) );

            }
            else{
                if(files[i].getName().endsWith(".jpg")){
                    a.add(files[i]);
                }
            }
        }
        return a;
    }
}

这是ViewImage.java文件

public class ViewImage extends AppCompatActivity {
    ImageView iv2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_image);

        //Intent i = getIntent() ;
        //File f = (File)i.getExtras().getParcelable("img");
        String f = getIntent().getStringExtra("img");
        iv2 = (ImageView) findViewById(R.id.imageView2);
        iv2.setImageURI( Uri.parse( f));
    }
}

我在清单文件中请求以下权限

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

0 个答案:

没有答案