Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rubia28

#1
Buenas a todos,

Estoy desarrollando un juego de puzzles para android y me gustaría que las imágenes que tiene el usuario para elegir el puzzle en lugar de ser de una carpeta local, fuesen de una carpeta de firebase.

Actualmente, estas imágenes tienen un adaptador para que aparezcan en un gridview con un marco etc. Pero no consigo saber como poder dar acceso al imageAdapter y a la clase Main para que muestre las imágenes de la carpeta como hace ahora en local pero con los archivos de firebase.

He buscado el multitud de sitios pero no encuentro nada similar. ¿Alguien puede echarme una mano?

Actualmente tengo el imageAdapter y el MainActivity así;

ImageAdaptaer;

Código (java) [Seleccionar]
public ImageAdapter(Context c) {
        mContext = c;
        am = mContext.getAssets();
        try {
            files  = am.list("img");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


Código (java) [Seleccionar]
private Bitmap getPicFromAsset(ImageView imageView, String assetName) {
        // Obtener las dimensiones de la Vista
        int targetW = imageView.getWidth();
        int targetH = imageView.getHeight();

        if(targetW == 0 || targetH == 0) {
            // la vista no tiene dimensiones establecidas
            return null;
        }

        try {
            InputStream is = am.open("img/" + assetName);
            // Obtener las dimensiones del mapa de bits
            BitmapFactory.Options bmOptions = new BitmapFactory.Options();
            bmOptions.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(is, new Rect(-1, -1, -1, -1), bmOptions);
            int photoW = bmOptions.outWidth;
            int photoH = bmOptions.outHeight;

            // Determine cuánto reducir la imagen
            int scaleFactor = Math.min(photoW/targetW, photoH/targetH);

            is.reset();

            // Decodifica el archivo de imagen en un mapa de bits de tamaño para llenar la vista
            bmOptions.inJustDecodeBounds = false;
            bmOptions.inSampleSize = scaleFactor;
            bmOptions.inPurgeable = true;

            return BitmapFactory.decodeStream(is, new Rect(-1, -1, -1, -1), bmOptions);
        } catch (IOException e) {
            e.printStackTrace();

            return null;
        }
    }


MainActivity;

Código (java) [Seleccionar]
AssetManager am = getAssets();
        try {
            final String[] files = am.list("img");

            GridView grid = findViewById(R.id.grid);
            grid.setAdapter(new ImageAdapter(this));
            grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                    Intent intent = new Intent(getApplicationContext(), PuzzleActivity.class);
                    intent.putExtra("assetName", files[i % files.length]);


Mil gracias por vuestra ayuda.
#2
Buenas tardes a todos,

Estoy realizando una aplicación que trabaja con SQLite. He conseguido crear una consulta que me muestre todos los datos de la tabla y haga de "Ranking" de puntuaciones.

Ahora me gustaría poder hacer una lectura de una de las columnas de la tabla y en el caso de que el tiempo de la partida sea menor a los que estén registrados genere una notificación. ¿Cómo podría hacer la parte del código que comparase el tiempo de la partida actual con los tiempo guardados en la tabla de la BD?. El tiempo que se utiliza en la aplicación y el que se registra en la tabla está en String.

Para visualizar la tabla completa tengo la consulta realizada de la siguiente forma.

Código (java) [Seleccionar]
//Método para recoger los datos de la tabla.
    public Cursor getDatos(){
        String columnas[] = {"id","nombre","tiempo"};
        Cursor c = this.getReadableDatabase().query(TABLE_JUGADORES, columnas, null, null, null, null, "tiempo");
        return c;
    }

//Método para mostrar los datos de la tabla.
private void showResultados() {
        db = new AdminSQLiteOpenHelper(this);
        Cursor c = db.getDatos();
        item = new ArrayList<String>();
        String title = "", content = "";

        if (c.moveToFirst()) {
            do {
                title = c.getString(1);
                content = c.getString(2);
                item.add(title + " " + content);

            } while (c.moveToNext());
        }
        ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, item);
        lista.setAdapter(adaptador);
    }


Los datos de tiempo los almaceno de la siguiente forma:
Código (java) [Seleccionar]
registroActual=cronometro.getText().toString();

Mil gracias por la ayuda, saludos.
#3
Buenos días a todos!

Estoy realizando una aplicación a través de Android Studio en la cual he implementado que pueda sonar música de fondo a través de un servicio. A lo largo de toda la aplicación he implementado que mediante una opción del ActionBar o a través del menú principal puedas activar o desactivar esta música. Pero cuando le doy al botón de inicio y el teléfono sale de la aplicación (aun que esta se sigue ejecutando en segundo plano) la música continua sonando... Estoy intentando ver como puedo parar el servicio si el usuario pulsa el botón de Home.. pero por más que he probado los siguientes métodos, no consigo que funcione como me gustaría. ¿Como podría hacer la implementación para que si el usuario pulsa el botón de inicio del telefono y vuelve al menú principal la música deje de sonar?

Los métodos que he probado son estos;

Con este código, consigo que al pulsar el botón de home la música se pare.. pero tambien se para en el momento que toco cualquier botón de la aplicación, aunque no sea el de Home. ¿Habría alguna forma de programarlo de tal forma que solo actuase con el botón de HOME?
Código (java) [Seleccionar]
protected void onUserLeaveHint()
    {
        super.onUserLeaveHint();
        Toast.makeText(this, "You pressed the home button!", Toast.LENGTH_LONG).show();
        Log.i("Home button Pressed!", "Yes");
        stopService(new Intent(MenuPrincipal.this,ServicioMusica.class));
    }


Con este código he conseguido cumplir con cerrar el servicio al pulsar el botón de BACK, pero al pulsar el botón HOME el programa no hace nada.
Código (java) [Seleccionar]
public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            Log.d("Test", "Back button pressed!");
        } else if(keyCode == KeyEvent.KEYCODE_HOME) {
            stopService(new Intent(MenuPrincipal.this,ServicioMusica.class));
        } return super.onKeyDown(keyCode, event); }


Mil gracias por vuestra ayuda, saludos!!
#4
Hola de nuevo Rub'n!

A que te refieres con identacion??

Gracias, saludos!!
#5
Solucionado!!

Implemento en la clase que controla la BBDD.

Código (java) [Seleccionar]
public Cursor getDatos(){
        String columnas[] = {"id","nombre","tiempo"};
        Cursor c = this.getReadableDatabase().query(TABLE_JUGADORES, columnas, null, null, null, null, "tiempo");
        return c;
    }


A continuación en la clase que queremos que se muestre el resultado en pantalla añadimos el siguiente método;

Código (java) [Seleccionar]
private void showResultados(){
        db = new AdminSQLiteOpenHelper(this);
        Cursor c = db.getDatos();
        item = new ArrayList<String>();
        String title = "",content = "";

        if(c.moveToFirst()){
            do{
                title = c.getString(1);
                content = c.getString(2);
                item.add(title + " " + content);

            }while (c.moveToNext());
        }
        ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, item);
        lista.setAdapter(adaptador);
    }


Para que funcione el método declaremos una listview en el método principal de la clase.

Código (java) [Seleccionar]
lista = (ListView) findViewById(R.id.listViewResultados);
        showResultados();


Saludos!!
#6
Buenos días rub'n,

Ayer por fin conseguí poder guardar los datos del jugador en SQLite, al final lo que hice fue crear una nueva Activity donde mostrar por pantalla el nombre del jugador solicitado al terminar la partida junto con el tiempo de resolución del puzzle. En ese Activity habilité un botón que me permite guardar los datos (jugador y tiempo).

Ahora me encuentro con un nuevo problema.. me gustaría que en otro Activity, directamente se ejecutase una consulta a la tabla de SQLite de Partidas y me mostrase todo los datos que hay en la misma... pero por más que he probado formas de hacerlo.. no consigo que funcione.

El código que tengo hasta ahora es el siguiente;

Código (java) [Seleccionar]
public class HallOfFame extends AppCompatActivity {

    ArrayList<String> lista = new ArrayList<>();
    ListView listaResultados;
    ArrayAdapter adaptador;

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

        AdminSQLiteOpenHelper adminSQLiteOpenHelper = new AdminSQLiteOpenHelper(HallOfFame.this);
        SQLiteDatabase database = adminSQLiteOpenHelper.getWritableDatabase();
        String sql = "SELECT * FROM Partidas";
        Cursor registros = database.rawQuery(sql, null);

        if(registros.moveToFirst()){
            do{
                lista.add(registros.getString(1));
                lista.add(registros.getString(2));
            } while (registros.moveToNext());
        }

        listaResultados = (ListView) findViewById(R.id.listViewResultados);
        AdminSQLiteOpenHelper db = new AdminSQLiteOpenHelper(getApplicationContext());
        adaptador = new ArrayAdapter(this, android.R.layout.activity_list_item);
        listaResultados.setAdapter(adaptador);

    }
}


Y en su XML correspondiente

Código (xml) [Seleccionar]
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/listResultados"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HallOfFame">

    <ListView
        android:id="@+id/listViewResultados"
        android:layout_width="409dp"
        android:layout_height="729dp"
        android:layout_marginStart="1dp"
        android:layout_marginTop="1dp"
        android:layout_marginEnd="1dp"
        android:layout_marginBottom="1dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>


Normalmente en Java puedo hacer el Read a la BBDD sin problemas, pero en Android Studio no consigo que los resultados de la tabla se muestren en pantalla a través de la ListView..
No sé ya como poder solucionar esta parte ¿Cómo debería de ponerlo en la Activity para que directamente al entrar en esa Activity se lanzará la consulta a SQLite y me mostrase los datos en pantalla?

Mil gracias por la ayuda, saludos.
#7
Hola rub'n,

Lo primero de todo darte las gracias por la ayuda.

He intentado llamar al método TouchListenerGuardarPatida() desde el método que finaliza la partida y me abria correctamente la ventana emergente, pero al indicar el método TouchListenerGuardarPatida() en el método de gameOver la partida finaliza pero no realiza ninguna otra acción. La clase que tengo para el cuadro de dialogo la tengo tal que así;

Código (java) [Seleccionar]
public class TouchListenerGuardarPartida implements View.OnClickListener{

   ObjectPartida objectPartida = new ObjectPartida();
   public void onClick(View view) {
       final Context context = view.getContext();

       LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       final View vistaFormularioGuardarPartida = inflater.inflate(R.layout.guardar_partida, null, false);

       final EditText guardarNombreJugador = (EditText) vistaFormularioGuardarPartida.findViewById(R.id.escribirNombre);

       //Abrir cuadro de dialogo.
       AlertDialog.Builder builder = new AlertDialog.Builder(context);
       builder.setView(vistaFormularioGuardarPartida);
       builder.setTitle("Guardar Partida");
       builder.setMessage("Enhorabuena has resuelto el puzzle!\n" + "Tiempo de resolución: " + objectPartida.tiempoPartida + "\nIngresa tu nombre: ");
       builder.setPositiveButton("Guardar",
               new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int which) {
                       //Convertir los datos introducidos por el usurio en tipo String.
                       String nombreJugador = guardarNombreJugador.getText().toString();

                       //Objeto para poder manejar los valores.
                       objectPartida.nombre = nombreJugador;
                       //objectJudadores.tiempo = tiempoJugador;

                       boolean guardarPartida = new ControladorPartida(context).crear(objectPartida);
                       if (guardarPartida) {
                           Toast.makeText(context, "PARTIDA GUARDADA", Toast.LENGTH_SHORT).show();
                       } else {
                           Toast.makeText(context, "NO SE HA GUARDADO LA PARTIDA", Toast.LENGTH_SHORT).show();
                       }

                   }
               });
       builder.show();

   }

}


La idea original la he cogido de cómo crear una base de datos en Android con SQLite y guardar los datos a través de un cuadro de dialogo mediante un CRUD. Pero no soy capaz de saber como poder hacer saltar al cuadro de dialogo cuando termine la partida sin necesidad de darle a ningún botón como ocurria cuando llamaba a la ventana emergente...

Estoy ya desesperada porque no consigo dar con la forma de poder hacer saltar el cuadro para que me de la información y poder guardar los datos.

Mil gracias por la ayuda, saludos.
#8
Buenas tardes a todos,

Estoy haciendo un juego de puzzles y necesito que cuando termine la partida se abra un cuadro de dialogo sin necesidad de tener que darle a ningún botón ni cerrar la actividad.

He conseguido poder hacer una ventana emergente al terminar la partida, pero no consigo que cumpla con todas las funcionalidades que necesito y me gustaría que saliera un cuadro de dialogo con más prestaciones.

He estado buscando info y he conseguido que el cuadro de dialogo se abra si inserto un botón, pero no puedo meter un botón para guardar la partida ya que lo que quiero es que al terminar la partida aparezca directamente el cuadro de dialogo y se le solicite al jugador su nombre para guardarla y se informe de la puntuación (el cuadro de dialogo ya lo tengo con estas prestaciones).

Cómo puedo llamar al cuadro de dialogo para que se abra sin necesidad de que haya un botón para ello?

Os adjunto la parte del código que llama al cuadro de dialogo a través del botón. ¿Cómo podría hacerlo para que realizase la misma acción al terminar la partida en lugar de habilitando el botón?

Código (java) [Seleccionar]
Button botonGuardarPartida = (Button) findViewById(R.id.botonGuardarPartida);
       botonGuardarPartida.setOnClickListener(new OnClickListenerGuardarPartida());


Mil gracias como siempre por vuestra ayuda, saludos.

#9
Buenos días a todos,

Estoy empezando con la ejecución de programas en python y no consigo entender correctamente que es lo que realiza el programa siguiente..

Código (python) [Seleccionar]
import subprocess

# pipe.py

p = subprocess.Popen(["echo","Ejemplo de procesos en python.."], stdout=subprocess.PIPE)

print (p.communicate())


Por las pruebas de ejecución que he realizado a través de Linux, veo que el programa imprime por pantalla un mensaje en el terminal.. pero no consigo entender realmente que función hace stdout=subprocess.PIPE, ni porque a la hora de ejecutar el programa en el IDE imprime por pantalla (b'Ejemplo de procesos en python..\n', None). Entiendo que el primer argumento de Popen "echo" es un comando de Linux que imprime la salida por pantalla de la frase "Ejemplo de procesos en python..", pero no entiendo porque en la ejecución aparece el texto entre parentesís, la b en el inicio, el salto de línea \n y el None al final de la ejecución... He buscado información sobre esto pero no encuentro nada para poder entenderlo correctamente.. ¿Alguien puede ayudarme?

Mil gracias por la ayuda, saludos.
#10
Muchisimas gracias por la ayuda!!

Tenía un poco localizado que era por estar dentro de for.. pero no sabía como poder hacerlo.. ahora ya viendo que hay que inicializar una primera variable String fuera como has indicado y sacar el for en mensaje que quieres mostrar final lo veo mucho más claro! y podré modificar todos los puntos del menú para poder listar las funciones que me faltaban y que el resultado se vea como quería  ;D

Le echaré un vistazo a Stringbuffer y StringBuilder como me recomiendas, ahora mismo estoy empezando y estoy viendo todo de nuevas jejej

Mil gracias por la ayuda!!