我做了一个小应用程序,它可以读取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" />