2015-03-27 2 views
1

Можете ли вы рассказать мне или дать мне несколько кодов, которые мне нужно добавить в эти коды, чтобы получить изображения из моей базы данных. Я новичок в программировании в андроидах, любая помощь была бы высоко оценена.Как добавить изображение в ListView из моей базы данных?

DBHelper Класс:

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.Locale; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteQueryBuilder; 
import android.util.Log; 

class DBHelper extends SQLiteOpenHelper { 


private static final String DATABASE_PATH = "/data/data/com.example.imagelist/databases/"; 
private static final String DATABASE_NAME = "DbImage.db"; 
private static final int SCHEMA_VERSION = 1; 
private static final String TABLE_NAME = "image"; 
private static final String COLUMN_ID = "_id"; 
private static final String COLUMN_IMAGE = "img"; 
private static final String COLUMN_NAME = "name"; 




public SQLiteDatabase dbSqlite; 

private final Context myContext; 

public DBHelper(Context context){ 
    super(context, DATABASE_NAME, null, SCHEMA_VERSION); 
    this.myContext= context; 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

public void createDatabase() { 

    createDB(); 

} 

public void createDB(){ 

    boolean dbExist = DBExists(); 

    if(!dbExist){ 

     this.getReadableDatabase(); 

     copyDBFromResource(); 

    } 

} 



private boolean DBExists() { 

    SQLiteDatabase db = null; 

    try{ 
     String databasePath = DATABASE_PATH + DATABASE_NAME; 
     db = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE); 
     db.setLocale(Locale.getDefault()); 
     db.setLockingEnabled(true); 
     db.setVersion(1); 

    } catch (SQLiteException e) { 

     Log.e("SqlHelper", "database not found"); 
    } 

    if (db != null){ 

     db.close(); 
    } 

    return db != null ? true : false; 

} 



private void copyDBFromResource(){ 

    InputStream inputStream = null; 
    OutputStream outStream = null; 
    String dbFilePath = DATABASE_PATH + DATABASE_NAME; 

    try{ 

     inputStream = myContext.getAssets().open(DATABASE_NAME); 

     outStream = new FileOutputStream(dbFilePath); 

     byte [] buffer = new byte[1024]; 
     int length; 
     while ((length = inputStream.read(buffer)) > 0){ 
      outStream.write(buffer, 0, length); 

     } 

     outStream.flush(); 
     outStream.close(); 
     inputStream.close(); 

    } catch (IOException e){ 

     throw new Error("Problem copying database from resource file."); 
    } 

} 


public void openDatabase() throws SQLException { 

    String myPath = DATABASE_PATH + DATABASE_NAME; 
    dbSqlite = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 

} 

@Override 
public synchronized void close() { 

    if (dbSqlite !=null){ 

     dbSqlite.close(); 
    } 

    super.close(); 

} 

public Cursor getCursor() { 

    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); 

    queryBuilder.setTables(TABLE_NAME); 

    String [] asColumnsToReturn = new String [] { COLUMN_ID, COLUMN_IMAGE, COLUMN_NAME}; 

    Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, null, null, null, "_id ASC"); 

    return mCursor; 
} 

public String getName (Cursor c){ 
    return(c.getString(2)); 
} 

} 

Главный класс:

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.CursorAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Main extends Activity { 


private DBHelper dblistHelper = null; 
private Cursor ourCursor = null; 
private recipeAdapter adapter = null; 


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

    ListView myListView = (ListView) findViewById(R.id.listView); 

    dblistHelper = new DBHelper(this); 

    dblistHelper.createDatabase(); 

    dblistHelper.openDatabase(); 

    ourCursor=dblistHelper.getCursor(); 

    startManagingCursor(ourCursor); 

    adapter = new recipeAdapter(ourCursor); 

    myListView.setAdapter(adapter); 



    } 
    catch (Exception e) 
    { 

     Log.e("ERROR", "ERROR IN CODE: " + e.toString()); 

     e.printStackTrace(); 

    } 


} 




class recipeAdapter extends CursorAdapter { 

    recipeAdapter(Cursor c){ 
     super(Main.this, c); 
    } 

    @Override 
    public void bindView (View row, Context ctxt, Cursor c) 
    { 
     Holder holder = (Holder)row.getTag(); 
     holder.populateFrom(c, dblistHelper); 
    } 
    @Override 
    public View newView(Context ctxt, Cursor c, ViewGroup parent) 
    { 
     LayoutInflater inflater = getLayoutInflater(); 
     View row=inflater.inflate(R.layout.row, parent, false); 
     Holder holder = new Holder(row); 
     row.setTag(holder); 
     return(row); 
    } 


} 

static class Holder { 
    private TextView name=null; 
    private ImageView image=null; 

    Holder(View row){ 
     name=(TextView)row.findViewById(R.id.textView1); 
     image=(ImageView)row.findViewById(R.id.imageView1); 
    } 

    void populateFrom(Cursor c, DBHelper r){ 
     name.setText(r.getName(c)); 
     image.setImageBitmap(bm); 
    } 
} 
} 
+0

[проверить эту ссылку] (http://www.androidhub4you.com/2012/09/hello-friends-today-i-am-going-to-share.html) – krishnan

+0

@Blacktempel вы можете рассказать, какую часть мой код, который вы редактируете? похоже, ничего не изменилось. спасибо –

+0

@ DhonTañada Вы можете нажать на мое редактирование и увидеть все изменения. – Blacktempel

ответ

1

Создайте файл XML для элементов в ListView. Что-то вдоль этих линий:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" > 


<TextView 
    android:id="@+id/text1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/icon" 
    android:layout_toRightOf="@id/icon" 
    android:textColor="#FF0000" /> 

</RelativeLayout> 

Создать класс адаптера какой-то, что тянет контент из базы данных. Затем установите любые поля, которые есть в вашем списке, чтобы соответствующие данные из базы данных, что-то вроде этого:

public class CustomAdapter { 
    public CustomAdapter(Context context){ 
     // connect to you database 

    } 


    public View getItemView(/*pass your db object*/, View v, ViewGroup parent){ 
     if (v == null) { 
      v = View.inflate(getContext(), R.layout.row, null); 
     } 

     super.getItemView(object, v, parent); 


     TextView textView = (TextView) v.findViewById(R.id.text1); 
     textView.setText(/*dataObject.getdata*/); 

     // Do this as much as necessary 
    } 
public void loadObject(){ 
    //Get all of your data, set each row in list view by calling getView 
} 

Затем в вызове деятельности создать экземпляр вы объект, получить экземпляр вашего ListView, установите ListView в адаптере и вызов loadobjects

Это, как я это сделал, и это основано на информации, полученной от использования Синтаксических баз данных: https://parse.com/tutorials/parse-query-adapter

Это может помочь вам, как это SQL, связанные с: http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

Основная идея заключается в том, чтобы создать свой собственный адаптер для ListView, где вы установили ваши данные. Затем установите адаптер списка для этого адаптера.

+0

Можете ли вы рассказать мне, где я должен поместить эту строку кодов в свой существующий код, или я должен создать новый, включая этот код, который вы даете –

+0

Вы можете добавить его в свой собственный код. XML-файл уникален для себя, поэтому просто создайте его в своей папке res. Пользовательский класс адаптера также уникален, поэтому создайте класс в своей папке src. Создание экземпляра настраиваемого адаптера и настройка вашего ListView на этот адаптер могут быть выполнены в вашей существующей деятельности, которая содержит ListView –

+0

спасибо за помощь –

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