【问题标题】:I am not able to set multiple image in grid view?我无法在网格视图中设置多个图像?
【发布时间】:2014-04-25 14:11:03
【问题描述】:

我正在创建应用程序,其中 1.从相机拍照。 2.将其URI保存在数据库中 3.使用光标和适配器检索图像 uri 并在网格视图中设置。

我收到错误“打开跟踪文件时出错:没有这样的文件或目录 (2)” 我也看不到任何名称为“我的图像”的文件夹

主要活动

public class MainActivity extends ActionBarActivity {
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
    final int MEDIA_TYPE_IMAGE=2;
    Button click;
    ImageView image;
    Uri fileuri;
    int camera_capture=100;


    GridView gridactivity;
    Gridsource source;
    customiseadapter adapter;
    ArrayList<String> List;

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

        source=new Gridsource(this);
        source.open();

        gridactivity=(GridView) findViewById(R.id.grid_view);

        List=source.getallpath();
        adapter=new customiseadapter(getApplicationContext(),List);
        gridactivity.setAdapter(adapter);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.Add_button) {
            captureimage();

        }
        return super.onOptionsItemSelected(item);
    }

    private void captureimage() {
        if(cameraavail())
        {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            fileuri = getmediafileuri(MEDIA_TYPE_IMAGE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT , fileuri);
            startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
        }
        else
        {
            Toast.makeText(getApplicationContext(), "device with not camera support", Toast.LENGTH_SHORT).show();
        }
    }



    @Override
    protected void onActivityResult(int resultrequest, int resultcode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(resultrequest, resultcode, data);

        if (resultrequest==CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
            if (resultcode==RESULT_OK) {

                source.createpicture(fileuri.toString());
                ArrayList<String> list1 = source.getallpath();

                customiseadapter adapter1= new customiseadapter(getApplicationContext(), list1);
                gridactivity.setAdapter(adapter1);




            }else if
            (resultcode==RESULT_CANCELED)
            {
                Toast.makeText(getApplicationContext(),
                        "User cancelled image capture", Toast.LENGTH_SHORT)
                        .show();
            }

        }
    }

    private Uri getmediafileuri(int arg) {
        File mediafile= getmediafile(arg);

            return Uri.fromFile(mediafile) ;
        }
    private File getmediafile(int type){
        File mediadir=new File(Environment.getExternalStorageDirectory()+"/myimages");
        if(!mediadir.exists())
        {
            mediadir.mkdir();
        }

        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
                Locale.getDefault()).format(new Date());
        File mediafile;
        if(type==MEDIA_TYPE_IMAGE )
        {
            mediafile= new File(mediadir.getPath() + File.separator + "img_" + timeStamp +".png" );

        }else
        {
            return null;
        }
        return mediafile;
    }

    private boolean cameraavail() {
        if(getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA))
        return true;
        else 
            return false;

        }




}

2.mysqlitehelper

public class Mysqlitehelper extends SQLiteOpenHelper {



    public static final String Table_grid ="gridtable";
     public static final String column_ID ="ID";
     public static final String column_URI ="URI";

     public static  final String DB_name = "Griddb";
     public static  final int version =1;
     public static  final String Database_create = "create table "+Table_grid+ " (" 
             + column_ID +" integer primary key autoincrement," 
              + column_URI + " text not null);";


     public Mysqlitehelper(Context context) {
            super(context, DB_name, null, version);
                    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(Database_create);

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS"+ Table_grid);
        onCreate(db);
    }


}

3.customiseadapter

public class customiseadapter extends BaseAdapter {
    Context context;
    ArrayList<String> list;

    public customiseadapter(Context context, ArrayList<String> list) {
        super();
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return list.get(arg0);
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        ImageView image = new ImageView(context);
        Uri uri = Uri.parse(list.get(arg0));
        image.setImageURI(uri);
        image.setScaleType(ImageView.ScaleType.CENTER_CROP);
        image.setLayoutParams(new GridView.LayoutParams(70, 70));
        return image;
    }

}
  1. 网格源

    public class Gridsource {
        Mysqlitehelper mydbhelper;
        SQLiteDatabase database;
        String[] column_name={Mysqlitehelper.column_ID,Mysqlitehelper.column_URI};
    
    
        public Gridsource(Context context) {
            mydbhelper= new Mysqlitehelper(context);
        }
     public void open()
      {
          database=mydbhelper.getWritableDatabase();
      }
     public void close()
     {
         mydbhelper.close();
     }
    
     public void createpicture(String path)
     { 
         ContentValues value= new ContentValues();
         value.put(Mysqlitehelper.column_URI, path);
         database.insert(Mysqlitehelper.Table_grid, null, value);    
     }
    
    
     public ArrayList<String>getallpath()
     {
         ArrayList<String> pathlist = new ArrayList<String>();
         Cursor cursor = database.query(Mysqlitehelper.Table_grid, column_name, null, null, null, null, null, null);
         if(cursor.moveToFirst())
         do{
             String path = new String();
             path=cursor.getString(1);
    
             pathlist.add(path);
    
         }while(cursor.moveToNext());
         cursor.close();
    
    
         return pathlist;
     }
    }
    

请帮我找到解决办法

【问题讨论】:

    标签: android android-activity android-sqlite android-gridview android-file


    【解决方案1】:

    您的适配器需要工作。在您的 getView() 方法中,您假设参数是一个 URI。事实上,论据是:

    public View getView(final int position, View convertView, final ViewGroup parent) {
    ...
    }
    

    第一个参数是要渲染的网格视图中项目的位置。第二个是视图 - 可以回收。第三个是视图的父级。您正在尝试获取位置,一个简单的整数,并将其用作 URI

    您应该在 getView 中做的是将图像从数据库中拉出与“位置”项对应的图像

    有关为您的适配器开发加载器的更多信息,请参阅this link here

    【讨论】:

    • 否。我正在从数组列表中获取字符串并将其用作 uri。但它不起作用
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    相关资源
    最近更新 更多