Die Speicherung von Grafiken in drawable-Ordner und die zu ladenden Bilds mithilfe der BildPfad in Datenbank
Frage ich mich, wie man den BildPfad des Bildes gespeichert in den drawable-Ordner in eclipse. Der BildPfad gespeichert werden sollen in der SQLite-Datenbank. So, jetzt Frage ich mich, wie Kriege ich die Uri der BildPfad in der Datenbank. Jede Hilfe wird sehr geschätzt. Danke.
ImagePage.java
package main.page;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
public class ImagesPage extends Activity
{
Integer[] imageIDs = {R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4};
ImageAdapter imgDB = new ImageAdapter(this);
ArrayList<String> imageNames = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image);
Button btnNext = (Button)findViewById(R.id.buttonNext);
btnNext.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
Intent i = new Intent(ImagesPage.this, ImagesSecondpage.class);
startActivity(i);
}
});
GridView gridView = (GridView)findViewById(R.id.gridview);
gridView.setAdapter(new ImgAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id)
{
imgDB.open();
long _id = imgDB.insertImage("pic" + (position + 1)+ ".jpg");
imgDB.close();
}
});
}
public class ImgAdapter extends BaseAdapter
{
private Context context;
public ImgAdapter(Context c)
{
context = c;
}
@Override
public int getCount()
{
return imageIDs.length;
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView ,ViewGroup parent)
{
ImageView imageView;
if(convertView == null)
{
imageView = new ImageView(context);
imageView.setImageResource(getResources().getIdentifier(imageNames.get(position), defType, defPackage))
imageView.setLayoutParams(new GridView.LayoutParams(85,85));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setPadding(5, 5, 5, 5);
}else
{
imageView = (ImageView) convertView;
}
imageView.setImageResource(imageIDs[position]);
return imageView;
}
}
}
ImageAdapter.java
package main.page;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class ImageAdapter
{
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "img_name";
private static final String TAG = "DBAdapter";
private static final String DATABASE_NAME = "anniversary";
private static final String DATABASE_TABLE = "image";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE = "create table image (_id integer primary key autoincrement, "+ "img_name text not null);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public ImageAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
try
{
db.execSQL(DATABASE_CREATE);
}catch(SQLException e)
{
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w(TAG, "Upgrading database from version" +oldVersion + "to" + newVersion +", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS image");
onCreate(db);
}
}
public ImageAdapter open() throws SQLException
{
db = DBHelper.getReadableDatabase();
return this;
}
public void close()
{
DBHelper.close();
}
public long insertImage(String img_name)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, img_name);
return db.insert(DATABASE_TABLE, null, initialValues);
}
public boolean deleteImage(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID +"="+ rowId, null) > 0;
}
public Cursor getAllImages()
{
return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME}, null, null, null, null, null);
}
public Cursor getImage(long rowId) throws SQLException
{
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME}, KEY_ROWID +"="+ rowId, null, null, null, null, null);
if(mCursor != null)
{
mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateImage(long rowId, String img_name)
{
ContentValues args = new ContentValues();
args.put(KEY_NAME, img_name);
return db.update(DATABASE_TABLE, args, KEY_ROWID +"="+ rowId, null) > 0;
}
}
Ich habe aktualisiert die Codierung für die ImagePage.java wieder.
- Finden Sie diese link Lassen Sie mich wissen, wenn es für Sie arbeitet. njoy!!
- Hallo, vielen Dank für den link, aber ich verstehe nicht, wie die Antwort arbeitet. Ich nehme an, das Bild bezieht sich auf die Bildansicht? Dann wird die variable resId ich verstehe es nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
jede Bild-Ressource platziert werden soll in drawable also nicht über Weg Sie müssen nur den Namen des Bildes gespeichert werden in der Datenbank im Zusammenhang mit irgendeiner Entität, und die, indem Sie es aus der Datenbank können Sie die Bild-Ressource über den code unten
Update:
als nun aus deinem code nach Frage, die Sie versuchen, Bilder durch Namen(Pfad) statt Integer-array
Integer[] imageIDs = {R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4};
Sie möchten Bild-Ressourcen hervorgehoben werden, die durch Datenbank-also zuerst tun Sie, um alle Bild-Namen(die Namen identisch mit den Namen der Bilder in den drawable-Ordner), die Sie gespeichert in der Spalte einer Tabelle in der Datenbank, sobald Sie bekam den Namen durch Abfrage dann anstelle der Referenz durch Integer-array nur die Namen aus der Datenbank ermöglicht Ihnen den Zugriff auf die Bild-Ressourcen von drawables, im unter der Annahme, dass dem Namen des Bildes gespeichert sind, auf folgende WeiseArrayList<String> imageNames = new ArrayList<String>();
//hence in the while loop of cursor during retriving values from cursor
imageNames.add(cursor.getString(columnIndex));
damit der code aktualisiert wird, wie unten, wo
wenn Sie immer noch verwirrt, dann gibt es keine andere Lösung, die ich glaube, ich kann
"R.drawable.icon"
und Holen Sie sich die int, die für die Bild?