2017-08-15 2 views
0

J'utilise Ormlite pour utiliser la base de données.J'écris la fonction de recherche Utilisateur par firebaseId. Cette fonction vous permet d'obtenir des informations sur l'utilisateur: nom complet, adresse e-mail, photo. Mais quand allez-activité profil mon apliaction arrêterImpossible d'obtenir des données Utilisateur de la base de données

ProfileActivity.class

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_profile); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     ButterKnife.bind(this); 

     dbHelper = new DbHelper(this); 

     Application application = (Application) getApplicationContext(); 
     userFirebaseId = application.getFirebaseId(); 
//show line error 
     userMy = dbHelper.getByUser(userFirebaseId); 

     nameEditText.setText(userMy.getFullName()); 
     emailEditText.setText(userMy.getEmail()); 


     auth = FirebaseAuth.getInstance(); 
     user = FirebaseAuth.getInstance().getCurrentUser(); 
     authListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       if (user == null) { 
        startActivity(new Intent(ProfileActivity.this, LoginActivity.class)); 
        finish(); 
       } 
      } 
     }; 
    } 

DbHepler.class

DbHelper public class étend OrmLiteSqliteOpenHelper { PreparedQuery pq;

Dao<User, ?> userDao=null; 
    Dao<MyDream, ?> myDreamDao = null; 

    public static final String DB_NAME = "dream.db"; 
    public static final int DB_VERSION = 1; 

    public DbHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { 

     try { 
      TableUtils.createTable(connectionSource, Dream.class); 
      TableUtils.createTable(connectionSource, User.class); 
      TableUtils.createTable(connectionSource, MyDream.class); 
      Dao<Dream, Integer> dreamDao = getDao(Dream.class); 
      userDao = getDao(User.class); 
      myDreamDao = getDao(MyDream.class); 
      } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 


    @Override 
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { 
     try { 
      TableUtils.dropTable(connectionSource, Dream.class, true); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 


    public User getByUser(String firebaseId) { 
// this error line 
     QueryBuilder<User, ?> qb = userDao.queryBuilder(); 
     try { 
      qb.where().eq(User.Columns.FIREBASE_ID, firebaseId); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 


     try { 
      pq = qb.prepare(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 


     try { 
      return userDao.queryForFirst(pq); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    } 

mes journaux

FATAL EXCEPTION: main 
Process: magdalena.pl.dreamguide, PID: 11813 
                    java.lang.RuntimeException: Unable to start activity ComponentInfo{magdalena.pl.dreamguide/magdalena.pl.dreamguide.activity.ProfileActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'com.j256.ormlite.stmt.QueryBuilder com.j256.ormlite.dao.Dao.queryBuilder()' on a null object reference 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5417) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                     Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'com.j256.ormlite.stmt.QueryBuilder com.j256.ormlite.dao.Dao.queryBuilder()' on a null object reference 
                     at magdalena.pl.dreamguide.db.DbHelper.getByUser(DbHelper.java:460) 
                     at magdalena.pl.dreamguide.activity.ProfileActivity.onCreate(ProfileActivity.java:99) 
                     at android.app.Activity.performCreate(Activity.java:6251) 
                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                     at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:5417)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

Répondre

0

INITIALISATION méthode userDao intérieur onCreate. Cette méthode est appelée uniquement lorsque la base de données est créée comme expliqué here. Par conséquent, le code qui initialise userDao doit être rapproché de son utilisation, ou un endroit où il est exécuté avant son utilisation.