Ver mensagens sem resposta | Ver tópicos ativos Hoje é 24 Mai 2013, 02:47



Este tópico está trancado, você não pode editar mensagens ou enviar respostas.  [ 21 Mensagens ] 
 [RESOLVIDO] SQLite Expert Personal 
Autor Mensagem
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem [RESOLVIDO] SQLite Expert Personal
Criei um banco de dados usando o SQLite Expert Personal. Os testes no emulador funcionaram perfeitamente, consegui acessar minhas tabelas e mostrar as informações. Porém ao fazer as alterações para poder acessar o banco de um celular real seguindo o link http://www.reigndesign.com/blog/using-y ... lications/, quando eu tento mostrar as informações da minha tabela no listview, da erro "NullPointerException". Algum já conseguiu acessar as tabelas do banco acessando dessa maneira?


Editado pela última vez por Cah Vitale em 04 Nov 2012, 21:34, num total de 1 vezes



01 Nov 2012, 19:30
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem Re: SQLite Expert Personal
Olá
Posta o código e o LogCat

_________________
Abraços
___________
Novo App: CalcMat - Calculadora de materiais para concreto
Blog: Agorandroid - sobre programação Android
Twitter: @Agorandroid
___________
Campanha: Facilite sua vida e a dos outros usuários
Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.


01 Nov 2012, 20:03
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Bom, para poder acessar o banco pela pasta assets, eu usei o código do link http://www.reigndesign.com/blog/using-y ... mment-2046, daí como eu já tinha acessado meu banco e minhas tabelas pelo emulador, eu coloquei a classe que eu já tinha criado junto com a classe desse link e ficou assim:

public class DataBaseHelper extends SQLiteOpenHelper{
   
    //The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/guia.virtual.android/databases/";
 
    private static String DB_NAME = "bd_guia";
   
    //Nome das tabelas
    private static final String NOME_TABELA1 = "estabelecimento";
    private static final String NOME_TABELA2 = "atracao";
 
    private SQLiteDatabase db;
 
    private final Context myContext;
 
    /**
     * Constructor
     * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
     * @param context
     */

    public DataBaseHelper(Context context) {
 
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }  
 
  /**
     * Creates a empty database on the system and rewrites it with your own database.
     * */

    public void createDataBase() throws IOException{
 
        boolean dbExist = checkDataBase();
       
        if(dbExist){
           
            //Não faz nada, o banco já existe
           
        }else{
            //By calling this method and empty database will be created into the default system path
            //of your application so we are gonna be able to overwrite that database with our database.         
            db = this.getReadableDatabase();
            //close();            
               
            try {
 
                copyDataBase();
 
            } catch (IOException e) {
 
                throw new Error("Error copying database");
            }
        }
    }
 
    /**
     * Check if the database already exist to avoid re-copying the file each time you open the application.
     * @return true if it exists, false if it doesn't
     */

    private boolean checkDataBase(){
 
        SQLiteDatabase checkDB = null;
 
        try{
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
 
        }catch(SQLiteException e){

            //database does't exist yet.
        }
 
        if(checkDB != null){
 
            checkDB.close();
        }
       
        return checkDB != null ? true : false;
    }
 
    /**
     * Copies your database from your local assets-folder to the just created empty database in the
     * system folder, from where it can be accessed and handled.
     * This is done by transfering bytestream.
     * */

    private void copyDataBase() throws IOException{
 
        //Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);
 
        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;
 
        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);
 
        //transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }
 
        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }
 
    public void openDataBase() throws SQLException{
 
        //Open the database
        String myPath = DB_PATH + DB_NAME;
        db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
 
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
    }
   
    /***********************
     *
     * CLASSE COM OS MÉTODOS ONDE EU ACESSAVA MINHAS TABELAS E MOSTRAVA AS INFORMAÇÕES NO LISTVIEW
     */

   
    //Salva o estabelecimento, insere um novo ou atualiza
    public long salvar(TBEstabelecimento tbestabelecimento) {
        long id = tbestabelecimento.id;

        if (id != 0) {
            atualizar(tbestabelecimento);
        } else {
            // Insere novo
            id = inserir(tbestabelecimento);
        }
        return id;
    }
    
    // Salva a obra, insere uma nova ou atualiza
    public long salvarObra(Atracao obra) {
        long id = obra.id;

        if (id != 0) {
            atualizarObra(obra);
        } else {
            // Insere nova
            id = inserirObra(obra);
        }
        return id;
    }

    // Insere um novo estabelecimento
    public long inserir(TBEstabelecimento tbestabelecimento) {
       
        ContentValues values = new ContentValues();
        values.put(TBEstabelecimentos.NOME, tbestabelecimento.nome);
        values.put(TBEstabelecimentos.DESCRICAO, tbestabelecimento.descricao);
        values.put(TBEstabelecimentos.ENDERECO, tbestabelecimento.endereco);
        values.put(TBEstabelecimentos.TELEFONE, tbestabelecimento.telefone);
        values.put(TBEstabelecimentos.HORARIO, tbestabelecimento.horario);
        values.put(TBEstabelecimentos.FONTE, tbestabelecimento.fonte);
        //values.put(Estabelecimentos.FOTO, estabelecimento.foto);
        long id = inserir(values);
        return id;
    }

 // Insere um novo estabelecimento
    public long inserir(ContentValues valores) {
        long id = db.insert(NOME_TABELA1, "", valores);
        return id;
    }
    
    // Insere uma nova obra
    public long inserirObra(Atracao atracao) {
       
        ContentValues values = new ContentValues();
        values.put(Atracoes.NOME, atracao.nome);
        values.put(Atracoes.DESCRICAO, atracao.descricao);
        long id = inserirObra(values);
        return id;
    }

    // Insere uma nova obra
    public long inserirObra(ContentValues valores) {
        long id = db.insert(NOME_TABELA2, "", valores);
        return id;
    }

    // Atualiza o estabelecimento no banco. O id do estabelecimento é utilizado.
    public int atualizar(TBEstabelecimento tbestabelecimento) {
        ContentValues values = new ContentValues();
        values.put(TBEstabelecimentos.NOME, tbestabelecimento.nome);
        values.put(TBEstabelecimentos.DESCRICAO, tbestabelecimento.descricao);
        values.put(TBEstabelecimentos.ENDERECO, tbestabelecimento.endereco);
        values.put(TBEstabelecimentos.TELEFONE, tbestabelecimento.telefone);
        values.put(TBEstabelecimentos.HORARIO, tbestabelecimento.horario);
        values.put(TBEstabelecimentos.FONTE, tbestabelecimento.fonte);
        //values.put(Estabelecimentos.FOTO, estabelecimento.foto);

        String _id = String.valueOf(tbestabelecimento.id);

        String where = TBEstabelecimentos._ID + "=?";
        String[] whereArgs = new String[] { _id };

        int count = atualizar(values, where, whereArgs);

        return count;
    }

    // Atualiza o estabelecimento com os valores abaixo
    // A cláusula where é utilizada para identificar o estabelecimento a ser atualizado
    public int atualizar(ContentValues valores, String where, String[] whereArgs) {
        int count = db.update(NOME_TABELA1, valores, where, whereArgs);
        return count;
    }
    
    // Atualiza a obra no banco. O id da obra é utilizado.
    public int atualizarObra(Atracao obra) {
        ContentValues values = new ContentValues();
        values.put(Atracoes.NOME, obra.nome);
        values.put(Atracoes.DESCRICAO, obra.descricao);

        String _id = String.valueOf(obra.id);

        String where = Atracoes._ID + "=?";
        String[] whereArgs = new String[] { _id };

        int count = atualizarObra(values, where, whereArgs);

        return count;
    }

    // Atualiza a obra com os valores abaixo
    // A cláusula where é utilizada para identificar a obra a ser atualizado
    public int atualizarObra(ContentValues valores, String where, String[] whereArgs) {
        int count = db.update(NOME_TABELA2, valores, where, whereArgs);
        return count;
    }

    // Deleta o estabelecimento com o id fornecido
    public int deletar(long id) {
        String where = TBEstabelecimentos._ID + "=?";

        String _id = String.valueOf(id);
        String[] whereArgs = new String[] { _id };

        int count = deletar(where, whereArgs);

        return count;
    }

    // Deleta o estabelecimento com os argumentos fornecidos
    public int deletar(String where, String[] whereArgs) {
        int count = db.delete(NOME_TABELA1, where, whereArgs);
        return count;
    }
    
    // Deleta a obra com o id fornecido
    public int deletarObra(long id) {
        String where = Atracoes._ID + "=?";

        String _id = String.valueOf(id);
        String[] whereArgs = new String[] { _id };

        int count = deletarObra(where, whereArgs);

        return count;
    }

    // Deleta a obra com os argumentos fornecidos
    public int deletarObra(String where, String[] whereArgs) {
        int count = db.delete(NOME_TABELA2, where, whereArgs);
        return count;
    }

    // Busca o estabelecimento pelo id
    public TBEstabelecimento buscarEstabelecimento(long id) {
        // select * from estabelecimento where _id=?
        Cursor c = db.query(true, NOME_TABELA1, TBEstabelecimento.colunas, TBEstabelecimentos._ID + "=" + id, null, null, null, null, null);

        if (c.getCount() > 0) {

            // Posicinoa no primeiro elemento do cursor
            c.moveToFirst();

            TBEstabelecimento tbestabelecimento = new TBEstabelecimento();

            // Lê os dados
            tbestabelecimento.id = c.getLong(0);
            tbestabelecimento.nome = c.getString(1);
            tbestabelecimento.descricao = c.getString(2);
            tbestabelecimento.endereco = c.getString(3);
            tbestabelecimento.telefone = c.getString(4);
            tbestabelecimento.horario = c.getString(5);
            tbestabelecimento.fonte = c.getString(6);
            //Blob foto = c.getBlob(7);  

            return tbestabelecimento;
        }

        c.close();
       
        return null;
    }
    
    // Busca a obra pelo id
    public Atracao buscarObra(long id) {
        // select * from estabelecimento where _id=?
        Cursor c = db.query(true, NOME_TABELA2, Atracao.colunas, Atracoes._ID + "=" + id, null, null, null, null, null);

        if (c.getCount() > 0) {

            // Posicinoa no primeiro elemento do cursor
            c.moveToFirst();

            Atracao obra = new Atracao();

            // Lê os dados
            obra.id = c.getLong(0);
            obra.nome = c.getString(1);
            obra.descricao = c.getString(2);
            //estabelecimento.foto = c.getString(7);

            return obra;
        }
       
        c.close();

        return null;
    }

    // Retorna um cursor com todos os estabelecimentos
    public Cursor getCursor() {
        try {
            // select * from estabelecimento
            return db.query(NOME_TABELA1, TBEstabelecimento.colunas, null, null, null, null, null, null);
        } catch (SQLException e) {
            return null;
        }
    }
    
    // Retorna um cursor com todos as obras
    public Cursor getCursorObra() {
        try {
            // select * from estabelecimento
            return db.query(NOME_TABELA2, Atracao.colunas, null, null, null, null, null, null);
        } catch (SQLException e) {
            Log.e("ERRO!!!!!!", e.getMessage());
            return null;
        }
    }

    // Retorna uma lista com todos os estabelecimentos
    public List<TBEstabelecimento> listarEstabelecimentos() {
        Cursor c = getCursor();

        List<TBEstabelecimento> tbestabelecimentos = new ArrayList<TBEstabelecimento>();
       
        if (c.moveToFirst()) {

            // Recupera os índices das colunas
            int idxId = c.getColumnIndex(TBEstabelecimentos._ID);
            int idxNome = c.getColumnIndex(TBEstabelecimentos.NOME);
            int idxDescricao = c.getColumnIndex(TBEstabelecimentos.DESCRICAO);
            int idxEndereco = c.getColumnIndex(TBEstabelecimentos.ENDERECO);
            int idxTelefone = c.getColumnIndex(TBEstabelecimentos.TELEFONE);
            int idxHorario = c.getColumnIndex(TBEstabelecimentos.HORARIO);
            int idxFonte = c.getColumnIndex(TBEstabelecimentos.FONTE);
            //Blob idxFoto = c.getBlob(Estabelecimentos.FOTO);

            // Loop até o final
            do {
                TBEstabelecimento tbestabelecimento = new TBEstabelecimento();
                tbestabelecimentos.add(tbestabelecimento);

                // recupera os atributos de carro
                tbestabelecimento.id = c.getLong(idxId);
                tbestabelecimento.nome = c.getString(idxNome);
                tbestabelecimento.descricao = c.getString(idxDescricao);
                tbestabelecimento.endereco = c.getString(idxEndereco);
                tbestabelecimento.telefone = c.getString(idxTelefone);
                tbestabelecimento.horario = c.getString(idxHorario);
                tbestabelecimento.fonte = c.getString(idxFonte);
                //estabelecimento.foto = c.getBlob(idxFoto);

            } while (c.moveToNext());
        }
       
        c.close();

        return tbestabelecimentos;
    }
    
    // Retorna uma lista com todas as obras
    public List<Atracao> listarObras() {
        Cursor c = getCursorObra();

        List<Atracao> obras = new ArrayList<Atracao>();
       
        if (c.moveToFirst()) {

            // Recupera os índices das colunas
            int idxId = c.getColumnIndex(Atracoes._ID);
            int idxNome = c.getColumnIndex(Atracoes.NOME);
            int idxDescricao = c.getColumnIndex(Atracoes.DESCRICAO);

            // Loop até o final
            do {
                Atracao obra = new Atracao();
                obras.add(obra);

                // recupera os atributos de obra
                obra.id = c.getLong(idxId);
                obra.nome = c.getString(idxNome);
                obra.descricao = c.getString(idxDescricao);

            } while (c.moveToNext());
        }
       
        c.close();

        return obras;
    }

    // Busca o estabelecimento pelo nome "select * from estabelecimento where nome=?"
    public TBEstabelecimento buscarEstabelecimentoPorNome(String nome) {
    
        TBEstabelecimento tbestabelecimento = null;

        try {
            // Idem a: SELECT _id,nome,descricao.. from ESTABELECIMENTO where nome = ?
            Cursor c = db.query(NOME_TABELA1, TBEstabelecimento.colunas, TBEstabelecimentos.NOME + "='" +
                                    nome + "'", null, null, null, null);

            // Se encontrou...
            if (c.moveToNext()) {

                tbestabelecimento = new TBEstabelecimento();

                // utiliza os métodos getLong(), getString(), getInt(), etc para recuperar os valores
                tbestabelecimento.id = c.getLong(0);
                tbestabelecimento.nome = c.getString(1);
                tbestabelecimento.descricao = c.getString(2);
                tbestabelecimento.endereco = c.getString(3);
                tbestabelecimento.telefone = c.getString(4);
                tbestabelecimento.horario = c.getString(5);
                tbestabelecimento.fonte = c.getString(6);
                //estabelecimento.foto = c.getString(7);
               
                c.close();
            }
        } catch (SQLException e) {
           
            return null;
        }
        return tbestabelecimento;
    }
    
    // Busca a obra pelo nome "select * from obra where nome=?"
    public Atracao buscarObraPorNome(String nome) {
    
        Atracao obra = null;

        try {
            // Idem a: SELECT _id,nome,descricao.. from OBRA where nome = ?
            Cursor c = db.query(NOME_TABELA2, Atracao.colunas, Atracoes.NOME + "='" + nome + "'", null, null, null, null);

            // Se encontrou...
            if (c.moveToNext()) {

                obra = new Atracao();

                // utiliza os métodos getLong(), getString(), getInt(), etc para recuperar os valores
                obra.id = c.getLong(0);
                obra.nome = c.getString(1);
                obra.descricao = c.getString(2);
               
                c.close();
            }
        } catch (SQLException e) {
           
            return null;
        }
        return obra;
    }

    // Busca um estabelecimento utilizando as configurações definidas no
    // SQLiteQueryBuilder
    // Utilizado pelo Content Provider de estabelecimento
    public Cursor query(SQLiteQueryBuilder queryBuilder, String[] projection, String selection, String[] selectionArgs,
            String groupBy, String having, String orderBy) {
        Cursor c = queryBuilder.query(this.db, projection, selection, selectionArgs, groupBy, having, orderBy);
        return c;
    }
   
    @Override
    public synchronized void close() {
 
            if(db != null)
                db.close();
 
            super.close();
    }
}
 

Eu tenho uma tela inicial e ao clicar em um botão ela chama a classe abaixo:

public class CadastroEstabelecimento extends ListActivity {
   
    public static DataBaseHelper databasehelper;

    private List<TBEstabelecimento> tbestabelecimentos;
   
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
   
        try{
            databasehelper = new DataBaseHelper(this);
        }catch(SQLException e) {
                                  throw new Error("Unable to create database");
                           }
        atualizarLista();
         }
   
    protected void atualizarLista() {
        // Pega a lista de estabelecimentos e exibe na tela
                 tbestabelecimentos = databasehelper.listarEstabelecimentos();
                 // Adaptador de lista customizado para cada linha de um estabelecimento
        setListAdapter(new EstabelecimentoListAdapter(this, tbestabelecimentos));
              }
       
    @Override
    protected void onDestroy() {
        super.onDestroy();

        // Fecha o banco
        databasehelper.close();
    }
}
 

Porém está apresentando o seguinte erro no LogCat:

11-01 22:27:51.496: E/AndroidRuntime(1747): Uncaught handler: thread main exiting due to uncaught exception
11-01 22:27:51.514: E/AndroidRuntime(1747): java.lang.RuntimeException: Unable to start activity ComponentInfo{guia.virtual.android/guia.virtual.android.CadastroEstabelecimento}: java.lang.NullPointerException
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.os.Handler.dispatchMessage(Handler.java:99)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.os.Looper.loop(Looper.java:123)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.app.ActivityThread.main(ActivityThread.java:4363)
11-01 22:27:51.514: E/AndroidRuntime(1747): at java.lang.reflect.Method.invokeNative(Native Method)
11-01 22:27:51.514: E/AndroidRuntime(1747): at java.lang.reflect.Method.invoke(Method.java:521)
11-01 22:27:51.514: E/AndroidRuntime(1747): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-01 22:27:51.514: E/AndroidRuntime(1747): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-01 22:27:51.514: E/AndroidRuntime(1747): at dalvik.system.NativeStart.main(Native Method)
11-01 22:27:51.514: E/AndroidRuntime(1747): Caused by: java.lang.NullPointerException
11-01 22:27:51.514: E/AndroidRuntime(1747): at guia.virtual.android.CadastroEstabelecimento.atualizarLista(CadastroEstabelecimento.java:50)
11-01 22:27:51.514: E/AndroidRuntime(1747): at guia.virtual.android.CadastroEstabelecimento.onCreate(CadastroEstabelecimento.java:42)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-01 22:27:51.514: E/AndroidRuntime(1747): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
11-01 22:27:51.514: E/AndroidRuntime(1747): ... 11 more

Espero que você consiga entender, pois a classe que cria o banco ficou grande com o código do link....


01 Nov 2012, 20:29
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem Re: SQLite Expert Personal
Verifica na linha 50 do CadastroEstabelecimento.java, o erro ocorre nessa linha.

_________________
Abraços
___________
Novo App: CalcMat - Calculadora de materiais para concreto
Blog: Agorandroid - sobre programação Android
Twitter: @Agorandroid
___________
Campanha: Facilite sua vida e a dos outros usuários
Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.


01 Nov 2012, 20:42
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Eu verifiquei e fiz um debug do código e meu db está nulo, mesmo depois de passar pela linha db = this.getReadableDatabase() e pela linha db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); ele continua nulo. Porque será?
Nessa linha que você falou é onde eu tento mostrar as informações, mas como o banco está nulo, meu cursor também fica nulo.


02 Nov 2012, 12:48
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem Re: SQLite Expert Personal
Verifica porque não está copiando do assets.

_________________
Abraços
___________
Novo App: CalcMat - Calculadora de materiais para concreto
Blog: Agorandroid - sobre programação Android
Twitter: @Agorandroid
___________
Campanha: Facilite sua vida e a dos outros usuários
Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.


02 Nov 2012, 13:09
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Certo, mas como posso verificar isso?
Pode ser quando chamo a classe DataBaseHelper?


02 Nov 2012, 19:33
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem Re: SQLite Expert Personal
1. Compara a sua implementação com o tutorial
2. Segue pelo debug quais métodos estão executando

_________________
Abraços
___________
Novo App: CalcMat - Calculadora de materiais para concreto
Blog: Agorandroid - sobre programação Android
Twitter: @Agorandroid
___________
Campanha: Facilite sua vida e a dos outros usuários
Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.


02 Nov 2012, 20:26
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Eu já comparei, está identico o código...
Só uma coisa que não fica claro no tutorial, o código abaixo, eu posso colocar na minha classe inicial?

DataBaseHelper myDbHelper;
        myDbHelper = new DataBaseHelper(this);

        try {
           
            myDbHelper.createDataBase();
        } catch (IOException e) {
            throw new Error("Unable to create database");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {

            myDbHelper.openDataBase();
        } catch (SQLException e) {
            throw e;
        }
 

Pois eu acho que é quando eu passo esse "this" que vai nulo, mas eu não sei como corrigir isso...
Ele entra nos métodos, mas sempre mantém o db nulo....


Editado pela última vez por A H Gusukuma em 03 Nov 2012, 06:43, num total de 1 vezes

Tags código



02 Nov 2012, 20:34
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem Re: SQLite Expert Personal
Não só pode, como deve!
Sem essa parte o esquema não funciona

_________________
Abraços
___________
Novo App: CalcMat - Calculadora de materiais para concreto
Blog: Agorandroid - sobre programação Android
Twitter: @Agorandroid
___________
Campanha: Facilite sua vida e a dos outros usuários
Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.


02 Nov 2012, 21:19
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Então eu coloquei na minha tela inicial, mas quando tento abrir a classe com o listview da erro. O banco está nulo. Tentei anexar minhas classes, mas não permite arquivo.java, mas caso você queira dar uma olhada eu copio no word e te envio. Pois tenho uma classe inicial onde coloquei essa parte de código abaixo, e ao clicar em um botão nessa classe inicial era pra abrir uma classe que acessa os métodos da classe DataBaseHelper e mostra a lista. Mas da erro, pois está nulo.
Não sei se devo colocar outra coisa no lugar do "this".


02 Nov 2012, 21:37
Perfil
Dalvik Virtual Machine
Dalvik Virtual Machine

Data de registro: 17 Jul 2011, 10:55
Mensagens: 1997
Localização: São Paulo
Mensagem Re: SQLite Expert Personal
Para colocar o código java é só colar o código entre as tags: "[java]" codigo java "[java]" , sem as aspas.
Eu não tenho como analisar código a não ser pelo forum.
Debuga o seu app e verifica porque não está conseguindo copiar o db.

_________________
Abraços
___________
Novo App: CalcMat - Calculadora de materiais para concreto
Blog: Agorandroid - sobre programação Android
Twitter: @Agorandroid
___________
Campanha: Facilite sua vida e a dos outros usuários
Netiqueta:Procure responder as sugestões. Quando encontrar a solução, coloque [Resolvido] no primeiro post o mais rápido possível. Lembre-se de agradecer às pessoas que ajudaram e poste a solução do problema.


02 Nov 2012, 23:07
Perfil
Android application
Android application

Data de registro: 22 Nov 2011, 12:58
Mensagens: 84
Mensagem Re: SQLite Expert Personal
Bom dia Cah Vitale!
Já passei pelo mesmo problema que vc, tentei utilizar este exemplo do link
http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/#comment-2046
Não tive sucesso! Daí resolvi o problema fazendo de outra forma.
aki o link do meu tópico que resolvi isso:http://www.portalandroid.org/comunidade/viewtopic.php?f=26&t=21755

Este código do que postei ai no link e para fazer a copia do banco que esta na pasta assets para pasta do dispositivo!
Depois fiz outro metodo que verifica si já existe um banco ou não para pode fazer a copia!
private boolean CheckDataDB() {
        try {
            Log.i("Entro no ChekDB!", "Aviso");
            String myPath = DB_PATH + nmBD;
            checkDB = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);
            Log.i("CheckDB=" + checkDB, "Aviso");
        } catch (Exception e) {
            Log.e("Banco de dados não existe ainda !", "Erro");
        }
        if (checkDB != null) {
            checkDB.close();
            return true;
        } else {
            return false;
        }
    }


03 Nov 2012, 12:19
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Bom dia Igor, eu tinha visto esse seu post, vi que você também não conseguiu seguindo esse link. Tentarei utilizar os códigos que você postou e qualquer coisa posto aqui alguma dúvida.
Obrigada pela ajuda A H, caso não de certo com o código do Igor, eu posto minhas classes pra vocês verem com as tags [java] ok?
Desde já eu agradeço a ajuda de vocês.


04 Nov 2012, 12:24
Perfil
Android application
Android application

Data de registro: 22 Nov 2011, 12:58
Mensagens: 84
Mensagem Re: SQLite Expert Personal
Boa tarde Cah Vitale!
Sim vc pode coloca as imagens zipadas na pasta “assetes” quando sua aplicação for executada fazer um método para cria uma pasta no sdcard e copiar e extrai as imagens para pasta dentro do sdcard. Depois e so vc usa o método para carregar as imagens. Caso ainda tenha dificuldade poste ai que t do uma forma e t mostro como fiz na minha aplicação para copiar o banco e as imagens!


04 Nov 2012, 14:38
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Boa tarde Igor e A H!

O banco ainda está apresentando o erro de NullPointerException...
Vou colocar abaixo minhas classes. Minha aplicação inicia com uma activity Splash que mostra uma foto. Depois é chamada a Activity principal.
Activity principal:

public class GuiaVirtualActivity extends Activity {
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);         
        setContentView(R.layout.main_inicial);
       
        DataBaseHelper myDbHelper;
        myDbHelper = new DataBaseHelper(this);

        try {
           
            myDbHelper.createDataBase();
        } catch (IOException e) {

            //Log.e("ERRO 3!!!!!!", e.getMessage());
            throw new Error("Unable to create database");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            myDbHelper.openDataBase();
        } catch (SQLException e) {
            Log.e("ERRO!!!!!!", e.getMessage());
            throw e;
        }
    }
   
    public void CopiaBanco(){
        try{
            Log.e("Inicio do teste 3","Aviso");
             
            AssetManager assetManager = getResources().getAssets();
            String arquiv=null;
            String[] files = null;
             //pega os aruivos da pasta assets e coloca em um vetor files
            files = assetManager.list("");
            //caso tenha arquivos mostra
           
            if(files.length!=0){
                   
                 for(int i=0;i<files.length;i++){
                     //mostra os arquivos do assets do seu projeto
                     Log.d("Dados assets="+files[i], "Aviso");
             }
                 
             //caminho de destino para onde eu quero copiar o arquivo da minha pasta assets
             OutputStream myOutput = new FileOutputStream(
                "/data/data/guia.virtual.android/databases/bd_guia");
             
           
            //crio um inputStrream do meu arquivo que esta no assets.
                InputStream myInputs = assetManager.open("bd_guia");

                // Transferir bytes do arquivo de entrada para a saída arquivo
                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInputs.read(buffer)) > 0) {
                    myOutput.write(buffer, 0, length);
                }

                // Cfecha e limpa tudo;
                myOutput.flush();

                myOutput.close();

                 myInputs.close();
            }else{
                Log.i("Não tem nada na pasta assets", "Aviso");
            }
           
        }catch (Exception e) {
            Log.e("Erro no Test3", "Erro");
        }
    }  
       
    public void museu (View v)
    {
        Intent i = new Intent();
                  i.setClass(this, CadastroEstabelecimento.class);
        startActivity(i);
    }
   
    public void zoo (View v)
    {
        Intent i = new Intent();
        i.setClass(this, CadastroAtracao.class);
        startActivity(i);
    }
}


Classe DataBaseHelper (classe do link):

public class DataBaseHelper extends SQLiteOpenHelper{
   
    //The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/guia.virtual.android/databases/";
 
    private static String DB_NAME = "bd_guia";
       
    //Nome das tabelas
    private static final String NOME_TABELA1 = "estabelecimento";
    private static final String NOME_TABELA2 = "atracao";
 
    private SQLiteDatabase db;
 
    private final Context myContext;    
 
    /**
     * Constructor
     * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
     * @param context
     */

    public DataBaseHelper(Context context) {
 
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }  

    //Creates a empty database on the system and rewrites it with your own database.    
    public void createDataBase() throws IOException{
 
        boolean dbExist = checkDataBase();
       
        if(dbExist){
           
            //Não faz nada, o banco já existe
           
        }else{
            //By calling this method and empty database will be created into the default system path
            //of your application so we are gonna be able to overwrite that database with our database.         
            db = this.getReadableDatabase();
            //this.getReadableDatabase();
            close();            
               
            try {
 
                copyDataBase();
 
            } catch (IOException e) {
 
                throw new Error("Error copying database");
            }
        }
    }
 
    /**
     * Check if the database already exist to avoid re-copying the file each time you open the application.
     * @return true if it exists, false if it doesn't
     */

    private boolean checkDataBase(){
 
        SQLiteDatabase checkDB = null;
 
        try{
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
 
        }catch(SQLiteException e){
 
            Log.e("Banco não existe ainda!!", "Erro");
            //Log.e("Banco não existe ainda!!", e.getMessage());
            //database does't exist yet.
        }
 
        if(checkDB != null){
 
            checkDB.close();
            return true;
        }
        else{
            return false;
        }
       
        //return checkDB != null ? true : false;
        //return checkDB != null;
    }  
 
    /**
     * Copies your database from your local assets-folder to the just created empty database in the
     * system folder, from where it can be accessed and handled.
     * This is done by transfering bytestream.
     * */

    private void copyDataBase() throws IOException{
 
        //Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);
         
        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;
 
        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);
 
        //transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }
 
        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }
 
    public void openDataBase() throws SQLException{
 
        //Open the database
        String myPath = DB_PATH + DB_NAME;
        db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
 
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
    }
   
    /***********************
     *
     * CLASSE REPOSITORIO
     *
     *
     * @param tbestabelecimento
     * @return
     */

   
    //Salva o estabelecimento, insere um novo ou atualiza
    public long salvar(TBEstabelecimento tbestabelecimento) {
        long id = tbestabelecimento.id;

        if (id != 0) {
            atualizar(tbestabelecimento);
        } else {
            // Insere novo
            id = inserir(tbestabelecimento);
        }
        return id;
    }
    
    // Salva a obra, insere uma nova ou atualiza
    public long salvarObra(Atracao obra) {
        long id = obra.id;

        if (id != 0) {
            atualizarObra(obra);
        } else {
            // Insere nova
            id = inserirObra(obra);
        }
        return id;
    }

    // Insere um novo estabelecimento
    public long inserir(TBEstabelecimento tbestabelecimento) {
       
        ContentValues values = new ContentValues();
        values.put(TBEstabelecimentos.NOME, tbestabelecimento.nome);
        values.put(TBEstabelecimentos.DESCRICAO, tbestabelecimento.descricao);
        values.put(TBEstabelecimentos.ENDERECO, tbestabelecimento.endereco);
        values.put(TBEstabelecimentos.TELEFONE, tbestabelecimento.telefone);
        values.put(TBEstabelecimentos.HORARIO, tbestabelecimento.horario);
        values.put(TBEstabelecimentos.FONTE, tbestabelecimento.fonte);
        //values.put(Estabelecimentos.FOTO, estabelecimento.foto);
        long id = inserir(values);
        return id;
    }

 // Insere um novo estabelecimento
    public long inserir(ContentValues valores) {
        long id = db.insert(NOME_TABELA1, "", valores);
        return id;
    }
    
    // Insere uma nova obra
    public long inserirObra(Atracao atracao) {
       
        ContentValues values = new ContentValues();
        values.put(Atracoes.NOME, atracao.nome);
        values.put(Atracoes.DESCRICAO, atracao.descricao);
        //values.put(Estabelecimentos.FOTO, estabelecimento.foto);
        long id = inserirObra(values);
        return id;
    }

    // Insere uma nova obra
    public long inserirObra(ContentValues valores) {
        long id = db.insert(NOME_TABELA2, "", valores);
        return id;
    }

    // Atualiza o estabelecimento no banco. O id do estabelecimento é utilizado.
    public int atualizar(TBEstabelecimento tbestabelecimento) {
        ContentValues values = new ContentValues();
        values.put(TBEstabelecimentos.NOME, tbestabelecimento.nome);
        values.put(TBEstabelecimentos.DESCRICAO, tbestabelecimento.descricao);
        values.put(TBEstabelecimentos.ENDERECO, tbestabelecimento.endereco);
        values.put(TBEstabelecimentos.TELEFONE, tbestabelecimento.telefone);
        values.put(TBEstabelecimentos.HORARIO, tbestabelecimento.horario);
        values.put(TBEstabelecimentos.FONTE, tbestabelecimento.fonte);
        //values.put(Estabelecimentos.FOTO, estabelecimento.foto);

        String _id = String.valueOf(tbestabelecimento.id);

        String where = TBEstabelecimentos._ID + "=?";
        String[] whereArgs = new String[] { _id };

        int count = atualizar(values, where, whereArgs);

        return count;
    }

    // Atualiza o estabelecimento com os valores abaixo
    // A cláusula where é utilizada para identificar o estabelecimento a ser atualizado
    public int atualizar(ContentValues valores, String where, String[] whereArgs) {
        int count = db.update(NOME_TABELA1, valores, where, whereArgs);
        return count;
    }
    
    // Atualiza a obra no banco. O id da obra é utilizado.
    public int atualizarObra(Atracao obra) {
        ContentValues values = new ContentValues();
        values.put(Atracoes.NOME, obra.nome);
        values.put(Atracoes.DESCRICAO, obra.descricao);

        String _id = String.valueOf(obra.id);

        String where = Atracoes._ID + "=?";
        String[] whereArgs = new String[] { _id };

        int count = atualizarObra(values, where, whereArgs);

        return count;
    }

    // Atualiza a obra com os valores abaixo
    // A cláusula where é utilizada para identificar a obra a ser atualizado
    public int atualizarObra(ContentValues valores, String where, String[] whereArgs) {
        int count = db.update(NOME_TABELA2, valores, where, whereArgs);
        return count;
    }

    // Deleta o estabelecimento com o id fornecido
    public int deletar(long id) {
        String where = TBEstabelecimentos._ID + "=?";

        String _id = String.valueOf(id);
        String[] whereArgs = new String[] { _id };

        int count = deletar(where, whereArgs);

        return count;
    }

    // Deleta o estabelecimento com os argumentos fornecidos
    public int deletar(String where, String[] whereArgs) {
        int count = db.delete(NOME_TABELA1, where, whereArgs);
        return count;
    }
    
    // Deleta a obra com o id fornecido
    public int deletarObra(long id) {
        String where = Atracoes._ID + "=?";

        String _id = String.valueOf(id);
        String[] whereArgs = new String[] { _id };

        int count = deletarObra(where, whereArgs);

        return count;
    }

    // Deleta a obra com os argumentos fornecidos
    public int deletarObra(String where, String[] whereArgs) {
        int count = db.delete(NOME_TABELA2, where, whereArgs);
        return count;
    }

    // Busca o estabelecimento pelo id
    public TBEstabelecimento buscarEstabelecimento(long id) {
        // select * from estabelecimento where _id=?
        Cursor c = db.query(true, NOME_TABELA1, TBEstabelecimento.colunas, TBEstabelecimentos._ID + "=" + id, null, null, null, null, null);

        if (c.getCount() > 0) {

            // Posicinoa no primeiro elemento do cursor
            c.moveToFirst();

            TBEstabelecimento tbestabelecimento = new TBEstabelecimento();

            // Lê os dados
            tbestabelecimento.id = c.getLong(0);
            tbestabelecimento.nome = c.getString(1);
            tbestabelecimento.descricao = c.getString(2);
            tbestabelecimento.endereco = c.getString(3);
            tbestabelecimento.telefone = c.getString(4);
            tbestabelecimento.horario = c.getString(5);
            tbestabelecimento.fonte = c.getString(6);
            //Blob foto = c.getBlob(7);  

            return tbestabelecimento;
        }

        c.close();
       
        return null;
    }
    
    // Busca a obra pelo id
    public Atracao buscarObra(long id) {
        // select * from estabelecimento where _id=?
        Cursor c = db.query(true, NOME_TABELA2, Atracao.colunas, Atracoes._ID + "=" + id, null, null, null, null, null);

        if (c.getCount() > 0) {

            // Posicinoa no primeiro elemento do cursor
            c.moveToFirst();

            Atracao obra = new Atracao();

            // Lê os dados
            obra.id = c.getLong(0);
            obra.nome = c.getString(1);
            obra.descricao = c.getString(2);
            //estabelecimento.foto = c.getString(7);

            return obra;
        }
       
        c.close();

        return null;
    }

    // Retorna um cursor com todos os estabelecimentos
    public Cursor getCursor() {
        try {
            // select * from estabelecimento
            return db.query(NOME_TABELA1, TBEstabelecimento.colunas, null, null, null, null, null, null);
        } catch (SQLException e) {
            Log.e("ERRO CURSOR!!!!!!", e.getMessage());
            return null;
        }
    }
    
    // Retorna um cursor com todos as obras
    public Cursor getCursorObra() {
        try {
            // select * from estabelecimento
            return db.query(NOME_TABELA2, Atracao.colunas, null, null, null, null, null, null);
        } catch (SQLException e) {
            Log.e("ERRO!!!!!!", e.getMessage());
            return null;
        }
    }

    // Retorna uma lista com todos os estabelecimentos
    public List<TBEstabelecimento> listarEstabelecimentos() {
        Cursor c = getCursor();

        List<TBEstabelecimento> tbestabelecimentos = new ArrayList<TBEstabelecimento>();
       
        if (c.moveToFirst()) {

            // Recupera os índices das colunas
            int idxId = c.getColumnIndex(TBEstabelecimentos._ID);
            int idxNome = c.getColumnIndex(TBEstabelecimentos.NOME);
            int idxDescricao = c.getColumnIndex(TBEstabelecimentos.DESCRICAO);
            int idxEndereco = c.getColumnIndex(TBEstabelecimentos.ENDERECO);
            int idxTelefone = c.getColumnIndex(TBEstabelecimentos.TELEFONE);
            int idxHorario = c.getColumnIndex(TBEstabelecimentos.HORARIO);
            int idxFonte = c.getColumnIndex(TBEstabelecimentos.FONTE);
            //Blob idxFoto = c.getBlob(Estabelecimentos.FOTO);

            // Loop até o final
            do {
                TBEstabelecimento tbestabelecimento = new TBEstabelecimento();
                tbestabelecimentos.add(tbestabelecimento);

                // recupera os atributos do estabelecimento
                tbestabelecimento.id = c.getLong(idxId);
                tbestabelecimento.nome = c.getString(idxNome);
                tbestabelecimento.descricao = c.getString(idxDescricao);
                tbestabelecimento.endereco = c.getString(idxEndereco);
                tbestabelecimento.telefone = c.getString(idxTelefone);
                tbestabelecimento.horario = c.getString(idxHorario);
                tbestabelecimento.fonte = c.getString(idxFonte);
                //estabelecimento.foto = c.getBlob(idxFoto);

            } while (c.moveToNext());
        }
       
        c.close();

        return tbestabelecimentos;
    }
    
    // Retorna uma lista com todas as obras
    public List<Atracao> listarObras() {
        Cursor c = getCursorObra();

        List<Atracao> obras = new ArrayList<Atracao>();
       
        if (c.moveToFirst()) {

            // Recupera os índices das colunas
            int idxId = c.getColumnIndex(Atracoes._ID);
            int idxNome = c.getColumnIndex(Atracoes.NOME);
            int idxDescricao = c.getColumnIndex(Atracoes.DESCRICAO);

            // Loop até o final
            do {
                Atracao obra = new Atracao();
                obras.add(obra);

                // recupera os atributos de obra
                obra.id = c.getLong(idxId);
                obra.nome = c.getString(idxNome);
                obra.descricao = c.getString(idxDescricao);

            } while (c.moveToNext());
        }
       
        c.close();

        return obras;
    }

    // Busca o estabelecimento pelo nome "select * from estabelecimento where nome=?"
    public TBEstabelecimento buscarEstabelecimentoPorNome(String nome) {
    
        TBEstabelecimento tbestabelecimento = null;

        try {
            // Idem a: SELECT _id,nome,descricao.. from ESTABELECIMENTO where nome = ?
            Cursor c = db.query(NOME_TABELA1, TBEstabelecimento.colunas, TBEstabelecimentos.NOME + "='" +
                                    nome + "'", null, null, null, null);

            // Se encontrou...
            if (c.moveToNext()) {

                tbestabelecimento = new TBEstabelecimento();

                // utiliza os métodos getLong(), getString(), getInt(), etc para recuperar os valores
                tbestabelecimento.id = c.getLong(0);
                tbestabelecimento.nome = c.getString(1);
                tbestabelecimento.descricao = c.getString(2);
                tbestabelecimento.endereco = c.getString(3);
                tbestabelecimento.telefone = c.getString(4);
                tbestabelecimento.horario = c.getString(5);
                tbestabelecimento.fonte = c.getString(6);
                //estabelecimento.foto = c.getString(7);
               
                c.close();
            }
        } catch (SQLException e) {
           
            return null;
        }
        return tbestabelecimento;
    }
    
    // Busca a obra pelo nome "select * from obra where nome=?"
    public Atracao buscarObraPorNome(String nome) {
    
        Atracao obra = null;

        try {
            // Idem a: SELECT _id,nome,descricao.. from OBRA where nome = ?
            Cursor c = db.query(NOME_TABELA2, Atracao.colunas, Atracoes.NOME + "='" + nome + "'", null, null, null, null);

            // Se encontrou...
            if (c.moveToNext()) {

                obra = new Atracao();

                // utiliza os métodos getLong(), getString(), getInt(), etc para recuperar os valores
                obra.id = c.getLong(0);
                obra.nome = c.getString(1);
                obra.descricao = c.getString(2);
               
                c.close();
            }
        } catch (SQLException e) {
           
            return null;
        }
        return obra;
    }

    // Busca um estabelecimento utilizando as configurações definidas no
    // SQLiteQueryBuilder
    // Utilizado pelo Content Provider de estabelecimento
    public Cursor query(SQLiteQueryBuilder queryBuilder, String[] projection, String selection, String[] selectionArgs,
            String groupBy, String having, String orderBy) {
        Cursor c = queryBuilder.query(this.db, projection, selection, selectionArgs, groupBy, having, orderBy);
        return c;
    }
   
    
     @Override
     public synchronized void close() {
 
             if(db != null)
                 db.close();
 
             super.close();
     }
}


Classe CadastroEstabelecimento (classe que deveria abrir ao clicar no botão, porém da o erro NPE, mas quando eu uso o banco direto no emulador, tudo funciona normalmente):

public class CadastroEstabelecimento extends ListActivity {
   
    protected static final int BUSCAR = 2;

    //public static Repositorio repositorio;
    public static DataBaseHelper databasehelper;

              //Cria uma lista da classe TBEstabelecimento
    private List<TBEstabelecimento> tbestabelecimentos;
   
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        //repositorio = new Repositorio(this); 
        atualizarLista();
    }
   
    protected void atualizarLista() {
        // Pega a lista de estabelecimento e exibe na tela
        tbestabelecimentos = databasehelper.listarEstabelecimentos();
        //tbestabelecimentos = repositorio.listarEstabelecimentos();
        // Adaptador de lista customizado para cada linha de um estabelecimento
        setListAdapter(new EstabelecimentoListAdapter(this, tbestabelecimentos));
    }
}


Igor, você pode ver que coloquei aquele seu código para copiar o banco da pasta assets na minha classe principal, com isso o problema com o getResources() parou. Você também colocou esse código onde chama o DataBaseHelper no onCreate da sua activity inicial?

Eu agradeço se vocês puderem me ajudar a identificar o erro, pois eu acho que é na hora de copiar ou alguma coisa na classe DataBaseHelper, pois quando puxo o banco do emulador tudo funciona.


Editado pela última vez por Cah Vitale em 04 Nov 2012, 15:24, num total de 1 vezes



04 Nov 2012, 15:16
Perfil
Android application
Android application

Data de registro: 22 Nov 2011, 12:58
Mensagens: 84
Mensagem Re: SQLite Expert Personal
edite este topico ai e coloque a targue "[\java]" para entender melhor seu codigo.


04 Nov 2012, 15:20
Perfil
Android application
Android application

Data de registro: 22 Nov 2011, 12:58
Mensagens: 84
Mensagem Re: SQLite Expert Personal
to fazendo aki sua classe para t ajudar! me add no skype:igor.chemin


04 Nov 2012, 15:32
Perfil
Android application
Android application

Data de registro: 22 Nov 2011, 12:58
Mensagens: 84
Mensagem Re: SQLite Expert Personal
vamos por partes! primeiro copiar o banco da pasta assets para pasta onde fica o projeto quando instalado!

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

public class GuiaVirtualActivity extends Activity {

   

    private ProgressDialog progressDialog;
   
    String lstrArq = "";
    Handler mHandler = new Handler();
    SQLiteDatabase banco = null;
    SQLiteDatabase checkDB = null;
    Cursor c, c1, c2;
    String nmBD = "bd_guia";
    String DB_PATH = "/data/data/guia.virtual.android/databases/";
   
    AssetManager assetManager;
   

   
   
   

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
   
        CarregaDB();
       
   
    }
   
    private boolean CheckDataDB() {
        try {
            Log.i("Entro no ChekDB!", "Aviso");
            String myPath = DB_PATH + nmBD;
            checkDB = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);
            Log.i("CheckDB=" + checkDB, "Aviso");
        } catch (Exception e) {
            Log.e("Banco de dados não existe ainda !", "Erro");
        }
        if (checkDB != null) {
            checkDB.close();
            return true;
        } else {
            return false;
        }
    }
    public void Copy_DB_Pronto() {
        try {
            assetManager = getResources().getAssets();
            banco = openOrCreateDatabase(nmBD, MODE_WORLD_READABLE, null);
            // Caminho banco de dados para sistema android
            OutputStream myOutput = new FileOutputStream(
                    "/data/data/guia.virtual.android/databases/bd_guia");
            // pega o banco do projeoto e copia para local onde android possa
            // ler este banco
            InputStream myInputs = assetManager.open("bd_guia.db");

            // Transfer bytes from the input file to the output file
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInputs.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }
            // Close and clear the streams
            myOutput.flush();
            myOutput.close();
            myInputs.close();

        } catch (Exception e) {
            Log.e("Erro no Copy DB", "Erro");
        } finally {
            banco.close();
        }
    }
   
    public void CarregaDB() {
        try {
            Progresso2("Criando Banco de Dados");
            new Thread() {
                @Override
                public void run() {
                   
                    boolean Db = CheckDataDB();
                    if (Db == true) {
                        Log.i("Banco ja existe!", "Aviso");
                        //pode coloca aki um codigo para fazer uma nova acao como chamar uma nova Activity ou entao carregar sua lista
                    } else {
                        Log.i("Banco ainda nao existe! chama metodo Copy",
                                "Aviso");
                        Copy_DB_Pronto();
                    }
                   

                    progressDialog.dismiss();
                }
            }.start();

        } catch (Exception e) {
            Log.e("Erro carregar DB", "Erro");
        }
    }
   
   
    public void Progresso2(final String titulo) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // TODO stub do método Auto-generated
                progressDialog = new ProgressDialog(GuiaVirtualActivity.this);
                progressDialog.setTitle(titulo);
                progressDialog.setMessage("Processando, Aguarde...");
                progressDialog.setIndeterminate(true);
                progressDialog.setCancelable(true);
                progressDialog.show();

            }
        });
    }
   
   

}

 


04 Nov 2012, 15:47
Perfil
What is AVD?
What is AVD?

Data de registro: 01 Nov 2012, 19:09
Mensagens: 14
Mensagem Re: SQLite Expert Personal
Igor muito obrigada pela ajuda, deu certo esse código que você postou...vlw msm....


04 Nov 2012, 21:33
Perfil
Android application
Android application

Data de registro: 06 Set 2012, 11:31
Mensagens: 95
Mensagem Re: [RESOLVIDO] SQLite Expert Personal
Igor podias-me explicar essa parte? Estou com algumas duvidas. E tenho uma classe para a DB e possivel criar nisso e enviar a mensagem para a activity principal.?



 public void Progresso2(final String titulo) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // TODO stub do método Auto-generated
                progressDialog = new ProgressDialog(GuiaVirtualActivity.this);
                progressDialog.setTitle(titulo);
                progressDialog.setMessage("Processando, Aguarde...");
                progressDialog.setIndeterminate(true);
                progressDialog.setCancelable(true);
                progressDialog.show();

            }
        });
    }

 

_________________
Sanou a sua dúvida ou resolveu o seu problema?
1º -> Compartilhe a solução postando-a, as pessoas com a mesma dúvida ou problema agradecem.
2º -> Adicione ao título do tópico "[RESOLVIDO]" para que os moderadores identifiquem que o seu tópico foi realmente resolvido.


06 Nov 2012, 14:05
Perfil
Mostrar mensagens anteriores:  Organizar por  
Este tópico está trancado, você não pode editar mensagens ou enviar respostas.   [ 21 Mensagens ] 

Quem está online

Usuários vendo este fórum: adenilsonsena, Aderbal Nunes, albinoneto, Alexandrercarvalho, amarildolacerdas, americano, Andre Brito, andreluzz, andrigo, Augusto, Berbert, Bitetti, Bruno, C-3PO, caciara, Cajux, Carlos, carminati, cehills, Chewbacca, china, claudioalfonso, Cleiton, Cristranus, cyzko, Darth Maul, Darth Vader, deborazb, Demerval, denisfln, diemesleno, difrene, digiwise, dikiloco, Dudi_FC, ederson_4, edsonel, eduardo.ali, EduardoYC, Eliezer Reis, euguns, fabricioLeonard, felipe.cintra, ferrodecaju, flashking, frances135, Francisco_Geraldo, frankmendes, freak, Gabriel, gamito, gedoor, geeks, Google Android, Gooooogle, grandebaro, Guilherme, guilhermesmo, gutem25, HanNiBaLSeTDf, helder, Igor_M, ismavolk, italoraony, jandersonjc, jcdeveloper, jijo, jlucasps, jrchuteboxe, juliano, juliaojunior, jzaires, klausenner, kleberperea, leandroviana, Leonardo333, levita, LForce, lucasmadeira, lucianno, luciano.sml, lucianoedipo, mam_computer, marcelosv, marcow, marianatallas, mateusff, mayahaslinger, Mayara Trevisol, Mayron Cimardi, Microdesk, miguel, mlemos, mrangel, nakahara, neosun, neviim, Nidio Dolfini, nsansilva, nullPointer, o-raposa, paint-horse, PAMinhoto, Paulo Bizzo, pbcjunior, peterson.bah, pgbatera, Philipe Alves, phobos, piagg, piantino, pyrobit, Rafael Felix, rafaelvital, rafsantos, rayberg, rbenatti, rdchaves, reginaldo, regis.ror, renatocoliveira, rguadagnini, rixargolo, rmendes, rodrigoinnova, rogerio, ROGÉRIO RODRIGUES, Roll, ronamore, sasuke_sarutobi, sidnei.gs, siker C3PO, SirBagda, sjta, snonca, Tangerina, Thelemita, thiagoalgo, tiagofalcao, tnarnold, Toks, ubiratan, voliverio, waideman, washington, weverton, xGambit, Zam Wesell e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2013 Portal Android - Comunidade de Desenvolvedores da Plataforma Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi