2016-09-09 9 views
0

これは私のログインコードを実行したクラスで、ログイン後にユーザーの名前とメールを取得します。 フェッチプロセスはうまくいきますが、別のレイアウトxmlファイルのテキストを設定しようとすると、nullポインタの例外が返されます。textviewのテキストをデータベースから取得しようとしましたが、できません。

これはNavigationMenuクラスがここにある私のログイン機能

FragmentTransaction fragmentTransaction; 
 
    NavigationView navigationView; 
 
    RoundImage roundedImage; 
 
    ImageView profileImage; 
 
    TextView uname,mail; 
 

 
    private SQLiteHandler db; 
 
    private SessionManager session; 
 

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

 
     toolbar = (Toolbar)findViewById(R.id.toolbar); 
 
     setSupportActionBar(toolbar); 
 

 

 
     db = new SQLiteHandler(getApplicationContext()); 
 

 
     HashMap<String,String> user = db.getUserDetails(); 
 

 
     String name = user.get("name"); 
 
     String email = user.get("email"); 
 

 
     Log.d("Soulsystem", name); 
 
     Log.d("Soulsystem", email); 
 

 
     uname = (TextView)findViewById(R.id.alluser); 
 
     mail = (TextView) findViewById(R.id.allemail); 
 

 
     try { 
 
      uname.setText(name); 
 
      mail.setText(email); 
 
     }catch (NullPointerException NPE) 
 
     { 
 
      Log.d("Soul system","Here is the error we are setting null values"); 
 
     } 
 
     /* profileImage = (ImageView)view.findViewById(R.id.navigation_view_Image); 
 
     profileImage.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       Log.d("NavigationMenu", "In profile Image view"); 
 
       Intent i = new Intent(NavigationMenu.this, ClientProfile.class); 
 
      } 
 
     });*/ 
 

 
     drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); 
 
     actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,R.string.drawer_open,R.string.drawer_close); 
 

 
     drawerLayout.setDrawerListener(actionBarDrawerToggle); 
 
     fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
 
     fragmentTransaction.add(R.id.main_container,new HomeFragment()); 
 
     fragmentTransaction.commit(); 
 

 
     // session manager 
 
     session = new SessionManager(getApplicationContext()); 
 

 
     if (!session.isLoggedIn()) { 
 
      logoutUser(); 
 
     } 
 

 
     navigationView = (NavigationView)findViewById(R.id.navigation_view); 
 

 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
 
      @Override 
 
      public boolean onNavigationItemSelected(MenuItem item) { 
 

 
       switch (item.getItemId()){ 
 

 
        case R.id.profile: 
 

 
         fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
 
         fragmentTransaction.replace(R.id.main_container, new ClientProfile()); 
 
         fragmentTransaction.commit(); 
 
         item.setChecked(true); 
 
         drawerLayout.closeDrawers(); 
 
         break; 
 

 
        case R.id.logout: 
 
         logoutUser(); 
 
         /* item.setChecked(true); 
 
         drawerLayout.closeDrawers();*/ 
 
         break; 
 
       } 
 
       return true; 
 
      } 
 
     }); 
 

 

 
    } 
 
    protected void onPostCreate(@Nullable Bundle savedInstanceState) { 
 
     actionBarDrawerToggle.syncState(); 
 
     super.onPostCreate(savedInstanceState); 
 
    } 
 

 
    private void logoutUser() { 
 
     session.setLogin(false); 
 

 
     db.deleteUsers(); 
 
     Intent intent = new Intent(NavigationMenu.this, MainActivity.class); 
 
     startActivity(intent); 
 
     finish(); 
 
    } 
 

 

 
}

そして、この私がテキストを設定しようとしました1ここでナビゲーションメニューXMLファイルとその作業ファイルである

<?xml version="1.0" encoding="utf-8"?> 
 
<android.support.v4.widget.DrawerLayout 
 
    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:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:id="@+id/drawer_layout" 
 
    tools:context="com.example.user.soulsystem.MainActivity"> 
 

 
    <LinearLayout 
 
     android:layout_width="match_parent" 
 
     android:layout_height="match_parent" 
 
     android:orientation="vertical"> 
 
     <include 
 
      android:layout_height="wrap_content" 
 
      android:layout_width="match_parent" 
 
      layout="@layout/toolbar_layout"/> 
 

 
     <FrameLayout 
 
      android:layout_width="match_parent" 
 
      android:layout_height="match_parent" 
 
      android:id="@+id/main_container"> 
 
      <TextView 
 
       android:id="@+id/alluser" 
 
       android:gravity="center" 
 
       android:layout_width="wrap_content" 
 
       android:layout_height="wrap_content" /> 
 
      <TextView 
 
       android:gravity="center_horizontal" 
 
       android:id="@+id/allemail" 
 
       android:layout_width="wrap_content" 
 
       android:layout_height="wrap_content" /> 
 
     </FrameLayout> 
 

 
    </LinearLayout> 
 
    <android.support.design.widget.NavigationView 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="match_parent" 
 
     android:id="@+id/navigation_view" 
 
     android:layout_gravity="start" 
 
     app:headerLayout="@layout/navigation_drawer_header" 
 
     app:menu="@menu/drawe_menu"> 
 
    </android.support.design.widget.NavigationView> 
 
</android.support.v4.widget.DrawerLayout>

この1私は私がレイアウトインターラインを使用してみました。この を行うことができますどのようにテキストを表示したいのxmlが、私はそれはのsetText()で私にnullポインタ例外を与えているテキストを設定しようとしたとき

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="fill_parent" 
 
    android:layout_height="fill_parent" 
 
    android:gravity="center" 
 
    android:orientation="vertical" 
 
    android:background="@color/bg_register"> 
 

 
    <LinearLayout 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="wrap_content" 
 
     android:layout_gravity="center_horizontal" 
 
     android:orientation="vertical" 
 
     android:paddingLeft="20dp" 
 
     android:paddingRight="20dp" > 
 
    <ImageView 
 
     android:layout_width="100dp" 
 
     android:layout_height="100dp" 
 
     android:id="@+id/navigation_view_Image" 
 
     android:background="@drawable/image" 
 
     android:src="@drawable/profile_image" 
 
     android:layout_marginLeft="30dp" 
 
     android:layout_marginTop="10dp"/> 
 

 
    <TextView 
 
     android:layout_below="@id/navigation_view_Image" 
 
     android:layout_width="300dp" 
 
     android:layout_height="50dp" 
 
     android:id="@+id/username" 
 
     android:textColor="@color/Black" 
 
     android:layout_marginBottom="5dp" 
 
     android:layout_marginTop="10dp" 
 
     android:layout_alignLeft="@+id/navigation_view_Image" 
 
     android:layout_alignStart="@+id/navigation_view_Image" /> 
 
     </LinearLayout> 
 
    <TextView 
 
     android:layout_below="@id/username" 
 
     android:layout_width="300dp" 
 
     android:layout_height="50dp" 
 
     android:id="@+id/email" 
 
     android:textColor="@color/Black" 
 
     android:layout_alignLeft="@+id/navigation_view_Image" 
 
     android:layout_alignStart="@+id/navigation_view_Image" /> 
 
</LinearLayout>

+1

* "それは私にnullポインタ例外を与える" * - さて、次に、logcatを表示します。エラーはどこに問題が存在するのか明確ではないのですか? –

+0

原因:java.lang.NullPointerException:com.example.user.soulsystem.NavigationMenu.onCreateのnullオブジェクト参照で仮想メソッド 'void android.widget.TextView.setText(java.lang.CharSequence)'を呼び出そうとしていますNavigati onMenu.java:57) –

+0

2番目のXMLファイルからユーザー名のテキストビューを呼び出すときにエラーが発生します –

答えて

0

db = new SQLiteHandler(getApplicationContext()); 

に次の行を置き換えます
db = new SQLiteHandler(this); 

getApplicationContext()はアプリケーション全体のコンテキストを返しますが、 'this'は実行中のアクティビティのコンテキストを返します。

関連する問題