logo
Bienvenido visitante. Para activar todas las funcionalidades, por favor Iniciar sesión o Registrarse.

Aviso

Icon
Error

Opciones
Ir a la última publicación
jamoran1356  
#1 Publicado : miércoles, 14 de enero de 2015 2:41:35(UTC)
jamoran1356

Posición: Newbie

Grupos: Registered
Registrado: 14/01/2015(UTC)
Mensajes: 5
Ubicación: Venezuela

Agradecimientos: 1 veces
Fue agradecido: 1 vez/veces in 1 publicación(es).
Reciban un cordial saludo, espero se encuentren bien y de antemano muchas gracias por la ayuda, la consulta es la siguiente:

Estoy haciendo una aplicacion para que me muestre frase aleatoriamente, ya tengo todo desarrollado, pero al llegar a la conexion con la base de datos simplemente no logro hacer que se me muestre nada, he seguido cuanto tutorial he encontrado por internet y no he conseguido nada que me pueda ayudar, el problema es que uso una base de datos con informacion precargada, la idea de esto es lograr que el usuario tenga o no internet pueda visualizar la frase, sin embargo en todo tutorial que he visto se ve que la base de datos es creada directamente desde la aplicacion y de ahi es de donde viene la duda: obligatoriamente debo crear la base de datos para poder hacer uso de ella? donde puedo ubicar los archivos .sqlite para que sean leidos por mi aplicacion (me dicen que en assets) y la ultima duda, como logro mostrar el resultado de la consulta en un textview.

Soy muy muy muy muy novato en esto, pero me gustaria si me pueden ayudar se los agradeceria muchisimo.
admin  
#2 Publicado : jueves, 15 de enero de 2015 22:07:43(UTC)
admin

Posición: Administration

Grupos: Administrators
Registrado: 07/10/2010(UTC)
Mensajes: 436
Hombre
Ubicación: España

Agradecimientos: 38 veces
Fue agradecido: 49 vez/veces in 48 publicación(es).
Buenas amigo,

todas tus respuestas estan aqui:

http://www.aprendeandroid.com/menu.htm

en el tema que hablo de las bases de datos!

un saludo y buena lectura! ;P
Un saludo,

Curso Completo GRATIS paso a paso de como programar Android
http://www.aprendeandroid.com
thanks 1 usuario agradecido admin por esta útil publicación.
jamoran1356 en 24/01/2015(UTC)
jamoran1356  
#3 Publicado : sábado, 24 de enero de 2015 3:05:49(UTC)
jamoran1356

Posición: Newbie

Grupos: Registered
Registrado: 14/01/2015(UTC)
Mensajes: 5
Ubicación: Venezuela

Agradecimientos: 1 veces
Fue agradecido: 1 vez/veces in 1 publicación(es).
admin escribió:
Buenas amigo,

todas tus respuestas estan aqui:

http://www.aprendeandroid.com/menu.htm

en el tema que hablo de las bases de datos!

un saludo y buena lectura! ;P


Buenas muchas gracias por tu respuesta, ahora bien he seguido los pasos de los tutoriales para el manejo de la base de datos, la idea es mostrar un registro aleatorio he creado dos clases, una llamada DataBaseHelper cuyo codigo es el siguiente:

Citar:
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLDataException;
import java.sql.SQLException;


public class DataBaseHelper extends SQLiteOpenHelper {
public static String DB_PATH = "/data/data/com.promesas.corpoeureka.promesas/databases/";
public static String DB_NAME = "palabras.sqlite";
private final Context myContext;
public static int DB_VER = 1;
public SQLiteDatabase myDataBase;

String sqlCrear = "CREATE TABLE promesas (_id INTEGER PRIMARY KEY AUTOINCREMENT, versiculos TEXT, autor TEXT)";


//Constructor para conectarnos a la base de datos
public DataBaseHelper(Context context, String nombre, SQLiteDatabase.CursorFactory factory, int version) {
super(context, nombre, factory, version);
this.myContext = context;

}

//Creamos la Base de Datos
public void onCreate(SQLiteDatabase db) {
if (db.isReadOnly()) {
db = getWritableDatabase();
}
db.execSQL(sqlCrear);

}
public void inicializar () {

// Esto es para inicializar la BD
DataBaseHelper db2 = new DataBaseHelper(this, DB_NAME, null, DB_VER);
try {
db2.createDataBase();
db2.openDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



//Aqui actualizamos la version de la base de datos en caso de requerirla
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//no hacemos nada aun
}

//Chequear si la base de datos existe en el directorio
public void createDatabase() throws IOException {
boolean dbExist = checkDatabase();

if (dbExist) {
//si existe no debemos hacer nada
} else {
// Llamando a este método se crea la base de datos vacía en la ruta
// por defecto del sistema de nuestra aplicación por lo que
// podremos sobreescribirla con nuestra base de datos.
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copiando database");
}
}

}

private boolean checkDatabase() {
try (SQLiteDatabase checkDB = null) {
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLDataException e) {
//Base de datos no creada aun
}
if (checkDB() != null) {
//cerramos la base de datos
checkDB.close();
}
return checkDB != null ? true : false;
}
}

public void openDatabase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

}

public synchronized void close() {
if (myDataBase != null) {
myDataBase.close();
super.close();
}

}

private void copyDataBase() throws IOException {
OutputStream databaseOutputStream = new FileOutputStream("" + DB_PATH + DB_NAME);
InputStream databaseInputStream;

byte[] buffer = new byte[1024];
int length;

databaseInputStream = myContext.getAssets().open("palabras");
while ((length = databaseInputStream.read(buffer)) > 0) {
databaseOutputStream.write(buffer);
}
databaseInputStream.close();
databaseOutputStream.flush();
databaseOutputStream.close();
}

}


Este codigo al tratar de ejecutarlo me lanza un error en el area de CheckDB que me lo muestra en rojo, no se por que pueda ser.

Ahora bien, luego de hacer la conexion (la cual no tengo idea de si se realiza o no) llamo a mi activity para que me muestre el resultado de la consulta:

Citar:
package com.promesas.corpoeureka.promesas;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
* Created by JesusMoran on 03-01-2015.
*/
public class frases extends ActionBarActivity {
static final String PUBLF = "Mira más PROMESAS DE DIOS, en el GooglePlay (http://goo.gl/X1GQOy)...";

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.frases);
TextView text = (TextView)findViewById(R.id.frasesTXT);

DataBaseHelper helper = new DataBaseHelper(this, DataBaseHelper.DB_NAME, null, DataBaseHelper.DB_VER);
helper.getReadableDatabase();

//Aqui voy a intentar consultar la base de datos
Cursor leer = helper.getReadableDatabase().rawQuery("SELECT versiculo, autor FROM promesas ORDER BY RAND()");
String x[] =
text.setText(x[0]);


Toast.makeText(this, "Me he conectado a la base de datos ;)", Toast.LENGTH_LONG).show();
helper.close();



}

public void backFr (View view) {
Intent i = new Intent(this, Main.class );
startActivity(i);
finish();
}


public void shareF(View view) {
TextView txtmensajeF = (TextView) findViewById(R.id.frasesTXT);
String mFrases = txtmensajeF.getText().toString();
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, mFrases + " " + PUBLF);
startActivity(sendIntent);

}


Aqui de verdad que no tengo ni idea de como continuar, ademas que me muestra errores como mencione asi que tampoco lo puedo ver en el emulador. Ojala puedas echarme una mano, desde ya muchas gracias
jamoran1356  
#4 Publicado : domingo, 25 de enero de 2015 9:52:13(UTC)
jamoran1356

Posición: Newbie

Grupos: Registered
Registrado: 14/01/2015(UTC)
Mensajes: 5
Ubicación: Venezuela

Agradecimientos: 1 veces
Fue agradecido: 1 vez/veces in 1 publicación(es).
Buenas, espero me puedas ayudar, ya estoy muy cerca de lograr la respuesta, segun mis bajos conocimientos en la materia, creo que debo hacer la llamada de los metodos creados en la clase DBhelper para que se ejecuten las consultas de las bases de datos, estoy trabajando con tu script, puesto que deseo usar una base de datos propia, la pregunta seria, como hago el llamado desde la clase, ya que las veces que he intentado llamar a los metodos: onCreate, Close, CreateDataBase, me salen errores y no me deja compilar y cuando lo hace me bota de la aplcacion.

Aqui tengo el codigo de mi main:

Código:
public class frases extends ActionBarActivity {
    static final String PUBLF = "Mira más PROMESAS DE DIOS, en el GooglePlay (http://goo.gl/X1GQOy)...";

    private String[] leer() {
        DataBaseHelper db = new DataBaseHelper(this, DataBaseHelper.DB_NAME,null,DataBaseHelper.DB_VER);
        SQLiteDatabase db1 = db.getReadableDatabase();
        String result;
        String columnas[]= { "versiculo","autor"};
        Cursor c;
        c = db1.query("promesas", columnas, null, null,null, null,null);
        int iu, ip;
        //id = c.getColumnIndex(_id);
        iu = c.getColumnIndex("versiculo");
        ip = c.getColumnIndex("autor");
        //int contador=0;
        // for(c.moveToFirst();!c.isAfterLast();c.moveToNext())
        //{
        //    result[contador] = c.getString(id)+" "+c.getString(iu)+" "+c.getString(ip) +"\n";
        //    contador++;
        //}
        c.moveToLast();
        result =  c.getString(iu) + " .- " + c.getString(ip) + "\n";
        return new String[]{result};


    }
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.frases);
        TextView text = (TextView)findViewById(R.id.frasesTXT);
        String[] x = leer();
        text.setText(x[0]);

        //Toast.makeText(this, "Me he conectado a la base de datos ;)", Toast.LENGTH_LONG).show();
    }
    public void backFr (View view) {
        Intent i = new Intent(this, Main.class );
        startActivity(i);
        finish();
    }


    public void shareF(View view) {
        TextView txtmensajeF = (TextView) findViewById(R.id.frasesTXT);
        String mFrases = txtmensajeF.getText().toString();
        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, mFrases + " " + PUBLF);
        startActivity(sendIntent);

    }

}


Te agradeceria muchisimo si puedes echarme una mano, De antemanos gracias
jamoran1356  
#5 Publicado : lunes, 26 de enero de 2015 17:46:04(UTC)
jamoran1356

Posición: Newbie

Grupos: Registered
Registrado: 14/01/2015(UTC)
Mensajes: 5
Ubicación: Venezuela

Agradecimientos: 1 veces
Fue agradecido: 1 vez/veces in 1 publicación(es).
Buenas, espero estes bien, una vez mas agradecido por tan excelente sitio.

Queria comentarte que he realizado el codigo tal como lo has colocado en el tutorial (el de copiar una base de datos externa) y me he metido a revisar (luego de hacer una instalacion limpia, es decir, borrando el programa) y no me aparece el archivo de la base de datos, debe ser por que en ninguna de mis clases principales hace el llamado a la base de datos, puedes ayudarme con eso? de antemano gracias

admin  
#6 Publicado : domingo, 1 de febrero de 2015 20:38:30(UTC)
admin

Posición: Administration

Grupos: Administrators
Registrado: 07/10/2010(UTC)
Mensajes: 436
Hombre
Ubicación: España

Agradecimientos: 38 veces
Fue agradecido: 49 vez/veces in 48 publicación(es).
Hola!

Debes leer mas detenidamente esos tutoriales, esta ahi todo explicado.

Te recomiendo que comiences por algo mas sencillo y poco a poso lo compliques, te veo todavia un poco "verde", debes ir poco a poco, si lo quieres hacer todo de golpe, te vas a agobiar y finalmente lo dejaras, por favor, comienza con cositas sencillas y ve añadiendo cosas hasta llegar a donde quieres!

Un saludo y animo!!
Un saludo,

Curso Completo GRATIS paso a paso de como programar Android
http://www.aprendeandroid.com
Usuarios navegando este tema
Guest (6)
Salto de foro  
No puedes iniciar nuevos temas en este foro.
No puedes responder a temas en este foro.
No puedes eliminar sus temas en este foro.
No puedes editar sus temas en este foro.
No puedes crear encuestas en este foro.
No puedes votar las encuestas en este foro.