Autore Topic: Problema con il database  (Letto 430 volte)

Offline Dr.Joek

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Emulatore a gogo
  • Sistema operativo:
    Windows7, Windows8.1, Ubuntu15.3, Windows10
Problema con il database
« il: 14 Luglio 2015, 04:00:26 CEST »
0
 :-)Ciao a tutti, mi sto passano l'estate facendo una applicazione, ancora sono all'inizio e quello che sto facendo è il fatto di memorizzare la lingua che l'utente ha scelto, per fare ciò ho creato un database, vi elenco tutti i file presenti dentro il progetto:
LocalDB1(dove ci sono le tabelle del database), LocalDB1Helper(che è l'helper), DataProvider(che svolge le funzioni di get e set per la lettura), seleziona_lingua.class(che è il file java da dove si seleziona la lingua), seleziona1.class(che è una delle tantissime pagine a cui verrà applicato questo fatto di leggere il database) e ovviamente i vari layout per: seleziona_lingua e seleziona1
L'applicazione funziona perfettamente quando nel database l'applicazione scrive, ma quando deve leggere l'applicazione crasha.
Ho visto svariati video dove estraevano i dati da un database, ho anche visto in questo forum, ma nessuna guida mi è servita perché tutte le guide puntavano a creare dei layout che si aggiungevano ogni volta che c'era un nuovo dato, io invece devo solamente inserire un dato del database dentro una variabile, tutto qui.
Per farvi capire meglio le guide che intendo sono di questo genere:
[medio] Creazione e utilizzo di un database SQLite - Android Developers Italia
Spero che mi aiutate, grazie in anticipo :-) .


Ora vi posto i codici:
LogCat
Codice: [Seleziona]
07-13 21:52:00.571  28774-28774/? D/dalvikvm﹕ Late-enabling CheckJNI
07-13 21:52:00.599  28774-28774/? D/dalvikvm﹕ GC_FOR_ALLOC freed 67K, 1% free 16540K/16664K, paused 2ms, total 2ms
07-13 21:52:00.599  28774-28774/? I/dalvikvm-heap﹕ Grow heap (frag case) to 20.297MB for 4291068-byte allocation
07-13 21:52:00.603  28774-28783/? D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 1% free 20730K/20856K, paused 3ms, total 3ms
07-13 21:52:00.607  28774-28777/? D/dalvikvm﹕ GC_CONCURRENT freed 0K, 1% free 20730K/20856K, paused 2ms+0ms, total 3ms
07-13 21:52:00.815  28774-28774/? D/libEGL﹕ loaded /system/lib/egl/libEGL_genymotion.so
07-13 21:52:00.815  28774-28774/? D/﹕ HostConnection::get() New Host Connection established 0xb97bfad0, tid 28774
07-13 21:52:00.819  28774-28774/? D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_genymotion.so
07-13 21:52:00.819  28774-28774/? D/libEGL﹕ loaded /system/lib/egl/libGLESv2_genymotion.so
07-13 21:52:00.899  28774-28774/? W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
07-13 21:52:00.899  28774-28774/? E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from GradienCache
07-13 21:52:00.907  28774-28774/? E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
07-13 21:52:00.907  28774-28774/? D/OpenGLRenderer﹕ Enabling debug mode 0
07-13 21:52:02.411  28774-28774/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed 8K, 1% free 20984K/21072K, paused 1ms, total 1ms
07-13 21:52:02.419  28774-28774/com.example.gioele.mathup I/dalvikvm-heap﹕ Grow heap (frag case) to 24.637MB for 4291068-byte allocation
07-13 21:52:02.419  28774-28783/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 1% free 25173K/25264K, paused 2ms, total 2ms
07-13 21:52:02.475  28774-28774/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed 1K, 1% free 27734K/27820K, paused 2ms, total 2ms
07-13 21:52:02.571  28774-28774/com.example.gioele.mathup W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
07-13 21:52:04.407  28774-28774/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ Databse create / opened.....
07-13 21:52:04.407  28774-28774/com.example.gioele.mathup E/SQLiteLog﹕ (1) table lingua has no column named user_linguaggio
07-13 21:52:04.407  28774-28774/com.example.gioele.mathup E/SQLiteDatabase﹕ Error inserting user_linguaggio=inglese
    android.database.sqlite.SQLiteException: table lingua has no column named user_linguaggio (code 1): , while compiling: INSERT INTO lingua(user_linguaggio) VALUES (?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
            at com.example.gioele.mathup.LocalDB1Helper.addInformations(LocalDB1Helper.java:36)
            at com.example.gioele.mathup.seleziona_lingua$1.onClick(seleziona_lingua.java:44)
            at android.view.View.performClick(View.java:4240)
            at android.view.View$PerformClick.run(View.java:17721)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
07-13 21:52:04.407  28774-28774/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ One row inserted
07-13 21:52:04.859  28774-28774/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed 44K, 1% free 28641K/28744K, paused 1ms, total 1ms
07-13 21:52:04.895  28774-28774/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed 4437K, 15% free 27809K/32348K, paused 2ms, total 2ms
07-13 21:52:04.927  28774-28774/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed 62K, 4% free 31131K/32348K, paused 1ms, total 1ms
07-13 21:52:04.939  28774-28774/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ Databse create / opened.....
07-13 21:52:04.943  28774-28774/com.example.gioele.mathup D/AndroidRuntime﹕ Shutting down VM
07-13 21:52:04.943  28774-28774/com.example.gioele.mathup W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa4bd1648)
07-13 21:52:04.943  28774-28774/com.example.gioele.mathup E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.gioele.mathup/com.example.gioele.mathup.seleziona1}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.gioele.mathup.seleziona1.onCreate(seleziona1.java:82)
            at android.app.Activity.performCreate(Activity.java:5133)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

LocalDB1
Codice (Java): [Seleziona]
package com.example.gioele.mathup;

/**
 * Created by Gioele on 13/07/2015.
 */

public class LocalDB1 {


    public static abstract class NewLingua{
        public static final String USER_LINGUAGGIO = "user_linguaggio";
        public static final String TABLE_NAME = "lingua";

    }
}

LocalDB1Helper
Codice (Java): [Seleziona]
package com.example.gioele.mathup;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * Created by Gioele on 13/07/2015.
 */

public class LocalDB1Helper extends SQLiteOpenHelper {
//--------------inizializzazione/creazione database------------------------------------------------------------
    private static final String DATABASE_NAME = "linguaggiodb";
    private static final int DATABASE_VERSIONS = 1;
    private static final String CREATE_QUERY =
    "CREATE TABLE "+ LocalDB1.NewLingua.TABLE_NAME+"("+LocalDB1.NewLingua.USER_LINGUAGGIO+"TEXT) ;";
    public LocalDB1Helper(Context context)
    {
        super(context,DATABASE_NAME,null,DATABASE_VERSIONS);
        Log.e("DATABASE OPERATIONS","Databse create / opened.....");
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_QUERY);
        Log.e("DATABASE OPERATIONS", "Table created");

    }
//------------comandi: leggi, scrivi----------------------------------------------------------------------
    //scrivi
    public void addInformations(String linguaggio, SQLiteDatabase db)
    {
        ContentValues contentValues = new ContentValues();
        contentValues.put(LocalDB1.NewLingua.USER_LINGUAGGIO,linguaggio);
        db.insert(LocalDB1.NewLingua.TABLE_NAME, null, contentValues);
        Log.e("DATABASE OPERATIONS", "One row inserted");
    }
    //leggi
    public Cursor getInformations(SQLiteDatabase db) {
        Cursor cursor;
        String[] uno = {LocalDB1.NewLingua.USER_LINGUAGGIO};
        Cursor c = db.query(LocalDB1.NewLingua.TABLE_NAME, uno, null, null, null, null, null);
        return c;
    }


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

    }


}

DataProvider
Codice (Java): [Seleziona]
package com.example.gioele.mathup;

/**
 * Created by Gioele on 14/07/2015.
 */

public class DataProvider {
    private String lingua;

    public String getLingua() {
        return lingua;
    }

    public void setLingua(String lingua) {
        this.lingua = lingua;
    }

    public DataProvider(String lingua){
        this.lingua = lingua;
    }

seleziona_lingua
Codice (Java): [Seleziona]
package com.example.gioele.mathup;

import com.example.gioele.mathup.util.SystemUiHider;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;


public class seleziona_lingua extends Activity {
    String lingua1;
    Context context = this;
    LocalDB1Helper LocalDB1Helper;
    SQLiteDatabase SQLiteDatabase;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_seleziona_lingua);
        final ImageView image1 = (ImageView) findViewById(R.id.imageView1);
        final ImageView image2 = (ImageView) findViewById(R.id.imageView2);



        image1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String linguaggio = "inglese";
                LocalDB1Helper = new LocalDB1Helper(context);
                SQLiteDatabase = LocalDB1Helper.getWritableDatabase();
                LocalDB1Helper.addInformations(linguaggio,SQLiteDatabase);
                Toast.makeText(getBaseContext(),"Lenguage saved :)",Toast.LENGTH_LONG).show();
                LocalDB1Helper.close();


                image1.setAlpha(0.0f);
                lingua1 = "inglese";
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                }
                Intent goseleziona = new Intent(getApplicationContext(), seleziona1.class);
                startActivity(goseleziona);
                finish();


            }
        });
        image2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String linguaggio = "italiano";
                LocalDB1Helper = new LocalDB1Helper(context);
                SQLiteDatabase = LocalDB1Helper.getWritableDatabase();
                LocalDB1Helper.addInformations(linguaggio, SQLiteDatabase);
                Toast.makeText(getBaseContext(),"Lenguage saved :)",Toast.LENGTH_LONG).show();
                LocalDB1Helper.close();


                image2.setAlpha(0.0f);
                lingua1 = "italiano";
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                }
                Intent goseleziona = new Intent(getApplicationContext(), seleziona1.class);
                startActivity(goseleziona);
                finish();


            }
        });


    }


}

seleziona1
Codice (Java): [Seleziona]
package com.example.gioele.mathup;



import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.style.LineHeightSpan;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;



    public class seleziona1 extends Activity {
        String lingua;
        String uno;
        int linguaint;
        int differenzaY = 0;
        int differenzaY1 = 0;
        int differenzaY2 = 0;
        String differenzaY12 = "0";
        String differenzaY22 = "0";
        int livello = 0;
        int vai = 0;
        int premi = 0;
        SQLiteDatabase sqldatabase;
        LocalDB1Helper helper;
        Cursor cursor;
        DataAdapter dataadapter;





        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_seleziona1);
            final ImageView italiano1 = (ImageView) findViewById(R.id.imageView);
            final ImageView italiano2 = (ImageView) findViewById(R.id.imageView7);
            final ImageView inglese1 = (ImageView) findViewById(R.id.imageView8);
            final ImageView inglese2 = (ImageView) findViewById(R.id.imageView6);
            final ImageView tendina1 = (ImageView) findViewById(R.id.tendina1);
            final ImageView pergamena = (ImageView) findViewById(R.id.pergamena);
            final ImageView tendina2 = (ImageView) findViewById(R.id.tendina2);
            final ImageView tendina3 = (ImageView) findViewById(R.id.tendina3);
            final Button button = (Button) findViewById(R.id.button20);
            final RelativeLayout layout2 = (RelativeLayout) findViewById(R.id.layout2);
            final LinearLayout layout1 = (LinearLayout) findViewById(R.id.layout1);
            italiano2.setVisibility(View.INVISIBLE);
            inglese2.setVisibility(View.INVISIBLE);
            italiano1.setVisibility(View.INVISIBLE);
            inglese1.setVisibility(View.INVISIBLE);
            tendina2.setVisibility(View.INVISIBLE);
//apro il database

            helper = new LocalDB1Helper(getApplicationContext());
            sqldatabase = helper.getReadableDatabase();

//sfrutto il database
            //leggo il database

            lingua = cursor.getString(0);
            DataProvider dataprovider = new DataProvider (lingua);

            button.setText(lingua);




            final View touchView = findViewById(R.id.tendina1);
            touchView.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {

                    final int action = event.getAction();
                    switch (action & MotionEvent.ACTION_MASK) {

                        case MotionEvent.ACTION_DOWN: {
                            premi = 1;
                            tendina3.setVisibility(View.VISIBLE);


                            differenzaY12 = String.valueOf((int) event.getY());


                            differenzaY1 = Integer.valueOf(differenzaY12);


                            break;
                        }
                        case MotionEvent.ACTION_UP: {
                            premi = 0;
                            tendina3.setVisibility(View.INVISIBLE);




                        }

                        case MotionEvent.ACTION_MOVE: {


                            differenzaY22 = String.valueOf((int) event.getY());


                            differenzaY2 = Integer.parseInt(differenzaY22);
                            if (vai == 0) {
                                layout1.getLayoutParams().height = differenzaY2;
                                button.setText("lol");
                            }
                            if (differenzaY2 < 286) {
                                layout2.getLayoutParams().height = 0;
                            }

                            if (differenzaY2 >= 286) {
                                if (lingua.equals("inglese")) {
                                    inglese1.setVisibility(View.VISIBLE);
                                    inglese1.setOnClickListener(new View.OnClickListener() {

                                        @Override
                                        public void onClick(View v) {
                                            inglese1.setVisibility(View.INVISIBLE);
                                            inglese2.setVisibility(View.VISIBLE);
                                            try {
                                                Thread.sleep(200);
                                            } catch (InterruptedException g) {
                                            }
                                            Intent goforme = new Intent(getApplicationContext(), Forme.class);
                                            goforme.putExtra("lingua", lingua);
                                            startActivity(goforme);
                                            inglese1.setVisibility(View.INVISIBLE);
                                            inglese2.setVisibility(View.INVISIBLE);
                                            tendina2.setVisibility(View.INVISIBLE);
                                            layout1.getLayoutParams().height = 0;
                                            button.setText("lal");
                                            tendina1.setVisibility(View.VISIBLE);


                                        }
                                    });
                                }
                                if (lingua.equals("italiano")) {
                                    italiano1.setVisibility(View.VISIBLE);
                                    italiano1.setOnClickListener(new View.OnClickListener() {

                                        @Override
                                        public void onClick(View v) {
                                            italiano1.setVisibility(View.INVISIBLE);
                                            italiano2.setVisibility(View.VISIBLE);
                                            try {
                                                Thread.sleep(200);
                                            } catch (InterruptedException g) {
                                            }
                                            Intent goforme = new Intent(getApplicationContext(), Forme.class);
                                            goforme.putExtra("lingua", lingua);
                                            startActivity(goforme);
                                            italiano1.setVisibility(View.INVISIBLE);
                                            italiano2.setVisibility(View.INVISIBLE);
                                            tendina2.setVisibility(View.INVISIBLE);
                                            layout1.getLayoutParams().height = 0;
                                            button.setText("lal");
                                            tendina1.setVisibility(View.VISIBLE);


                                        }
                                    });
                                }
                                layout2.getLayoutParams().height = differenzaY2 - 286;

                            }


                            if (premi == 0) {
                                differenzaY = differenzaY2 - differenzaY1;
                                if (differenzaY > 300) {
                                    button.setText("lel");

                                    while (livello <= 1725) {
                                        vai = 1;

                                        livello = livello + 1;
                                        layout1.getLayoutParams().height = livello;

                                    }
                                } else {
                                    layout1.getLayoutParams().height = 0;
                                    button.setText("lal");

                                }
                            }
                            if (livello >= 1725) {
                                tendina2.setVisibility(View.VISIBLE);
                                tendina1.setVisibility(View.INVISIBLE);
                                differenzaY = 0;
                                differenzaY1 = 0;
                                differenzaY2 = 0;
                                differenzaY22 = "1725";
                                differenzaY12 = "1725";
                                vai = 0;
                                livello = 0;
                                premi = 0;


                            }

                            break;
                        }
                    }

                    return true;

                }

            });

            final View touchView2 = findViewById(R.id.tendina2);
            touchView2.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {

                    final int action = event.getAction();
                    switch (action & MotionEvent.ACTION_MASK) {

                        case MotionEvent.ACTION_DOWN: {
                            tendina1.setVisibility(View.VISIBLE);
                            tendina2.setVisibility(View.INVISIBLE);
                            differenzaY = 0;
                            differenzaY1 = 0;
                            differenzaY2 = 0;
                            differenzaY22 = "0";
                            differenzaY12 = "0";
                            vai = 0;
                            livello = 0;
                            premi = 0;
                            layout1.getLayoutParams().height = 0;
                            button.setText("lal");
                            italiano1.setVisibility(View.INVISIBLE);
                            italiano2.setVisibility(View.INVISIBLE);
                            inglese1.setVisibility(View.INVISIBLE);
                            inglese2.setVisibility(View.INVISIBLE);

                            break;
                        }
                    }

                        return true;
                    }



            });



        }

    }
« Ultima modifica: 14 Luglio 2015, 04:04:25 CEST da Dr.Joek »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con il database
« Risposta #1 il: 14 Luglio 2015, 07:58:41 CEST »
0
Per cortesia non aprire doppi thread ( la copia è qua : Problema con il database - Android Developers Italia ).

Chiudo questo.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store