2017-06-30 11 views
0

私は2種類のユーザーが存在するAndroidアプリケーションを開発中です。同じホーム画面のさまざまなコンポーネントを表示します。だから、私は、 "userType"という名前のインテントString値を渡して、何を表示するかをフィルタします。最初にアプリケーションにログイン/サインアップすると、ホーム画面が正常に動作し、インテント値がnullではないアクティビティからインテント文字列を渡すことができません

また、ユーザーが既にログインしているかどうかを確認する別のスプラッシュアクティビティもあります。ユーザーがログインしている場合は、ユーザーを直接ホーム画面にリダイレクトします。今回は、インテント値がNULLポインタを表示しています。私は同じためにFirebaseデータベースを使用しています。

ここまでは私がこれまでに働いたことがあります。

同じコードに必要なコードを転記します。

SignUpActivity.java

private void writeUserProfile() { 

    showProgressDialog("Saving..."); 
    Intent intent = getIntent(); 

    String fullName = intent.getStringExtra("fullName"); 
    String userEmailAddress = intent.getStringExtra("emailAddress"); 
    String userType = intent.getStringExtra("userType"); 

    String phoneNumber = phoneNumberTextInputEditText.getText().toString().trim(); 
    String dateOfBirth = dateofBirthTextInputEditText.getText().toString().trim(); 
    String securityAnswer = securityAnswerTextInputEditText.getText().toString().trim(); 

    if (!validateForm(phoneNumber, dateOfBirth, securityAnswer)) { 
     hideProgressDialog(); 
     return; 
    } 

    if(userType.equalsIgnoreCase("Standard")){ 
     hideProgressDialog(); 
     Toast.makeText(this, "User details saved!",Toast.LENGTH_SHORT).show(); 
     Intent guardianIntent = new Intent(ContactDetailsActivity.this, AddGuardianActivity.class); 
//  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
      guardianIntent.putExtra("fullName", fullName); 
      guardianIntent.putExtra("userEmailAddress", userEmailAddress); 
      guardianIntent.putExtra("phoneNumber", phoneNumber); 
      guardianIntent.putExtra("dateofBirth", dateOfBirth); 
      guardianIntent.putExtra("userType", userType); 
      guardianIntent.putExtra("securityAnswer", securityAnswer); 
      guardianIntent.putExtra("securityQuestion", securityQuestion); 
      startActivity(guardianIntent); 
//  finish(); 
     }else{ 
      databaseReference.child("fullName").setValue(fullName); 
      databaseReference.child("phoneNumber").setValue(phoneNumber); 
      databaseReference.child("dateOfBirth").setValue(dateOfBirth); 
      databaseReference.child("securityAnswer").setValue(securityAnswer); 
      databaseReference.child("securityQuestion").setValue(securityQuestion); 
      databaseReference.child("userType").setValue(userType); 

      databaseReference.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        Profile profile = dataSnapshot.getValue(Profile.class); 
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ContactDetailsActivity.this); 
        SharedPreferences.Editor editor = preferences.edit(); 
        if(profile != null) { 
         editor.putString(Preferences.NAME, profile.getFullName()); 
         editor.putString(Preferences.EMAIL, profile.getEmail()); 
        } 
        editor.putString(Preferences.USERID, getUid()); 
        editor.apply(); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 

      hideProgressDialog(); 
      Toast.makeText(this, "Profile Created", Toast.LENGTH_SHORT).show(); 
      Intent mainMenuIntent = new Intent(ContactDetailsActivity.this, MainMenuActivity.class); 
      mainMenuIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
      mainMenuIntent.putExtra("userType", userType); 
      startActivity(mainMenuIntent); 
      finish(); 
     } 


    } 

し、メインメニューには、私はこのようなUSERTYPEに基づいてnavigationDrawerコンポーネントをフィルタリングします。

MainMenuActivity.java

Intent intent = getIntent(); 
    userType = intent.getStringExtra("userType"); 


    Fragment home_fragment = new HomeFragment(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    Bundle bundle = new Bundle(); 
    bundle.putString("userType", userType); 
    home_fragment.setArguments(bundle); 
    transaction.replace(R.id.container_gaFragments, home_fragment); 
    transaction.commit(); 

    final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

    if (getUid() != null) { 
     String userId = getUid(); 
     firebaseAuth = FirebaseAuth.getInstance(); 
     databaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(userId); 

    } else { 
     onAuthFailure(); 
    } 

    final PrimaryDrawerItem home = new PrimaryDrawerItem().withName("Home").withIdentifier(1).withIcon(GoogleMaterial.Icon.gmd_home); 
    final PrimaryDrawerItem profile = new PrimaryDrawerItem().withName("Profile").withIdentifier(2).withIcon(GoogleMaterial.Icon.gmd_account); 
    final PrimaryDrawerItem gallery = new PrimaryDrawerItem().withName("Gallery").withIdentifier(3).withIcon(R.drawable.ic_perm_media_black_24dp); 
    final PrimaryDrawerItem recognition = new PrimaryDrawerItem().withName("Recognition").withIdentifier(4).withIcon(GoogleMaterial.Icon.gmd_face); 
    final PrimaryDrawerItem maps = new PrimaryDrawerItem().withName("Maps").withIdentifier(5).withIcon(R.drawable.ic_place_black_24dp); 
    final PrimaryDrawerItem tagAndLocate = new PrimaryDrawerItem().withName("Tag & Locate").withIdentifier(6).withIcon(R.drawable.ic_remove_red_eye_black_24dp); 
    final PrimaryDrawerItem gamesAndPuzzle = new PrimaryDrawerItem().withName("Games & Puzzles").withIdentifier(7).withIcon(R.drawable.ic_casino_black_24dp); 
    final PrimaryDrawerItem backup = new PrimaryDrawerItem().withName("Backup").withIdentifier(8).withIcon(GoogleMaterial.Icon.gmd_save); 
    final PrimaryDrawerItem logout = new PrimaryDrawerItem().withName("Logout").withIdentifier(9).withIcon(FontAwesome.Icon.faw_sign_out); 

    DrawerImageLoader.init(new AbstractDrawerImageLoader() { 
     @Override 
     public void set(ImageView imageView, Uri uri, Drawable placeholder) { 
      Picasso.with(imageView.getContext()).load(uri).placeholder(placeholder).fit().centerCrop().into(imageView); 
     } 

     @Override 
     public void cancel(ImageView imageView) { 
      Picasso.with(imageView.getContext()).cancelRequest(imageView); 
     } 
    }); 

    String name = preferences.getString(Preferences.NAME, ""); 
    String email = preferences.getString(Preferences.EMAIL, ""); 
    final ProfileDrawerItem userProfile = new ProfileDrawerItem().withName(name).withEmail(email).withIcon(R.drawable.ic_account_circle_white_24dp); 

    headerResult = new AccountHeaderBuilder() 
      .withActivity(this) 
      .withHeaderBackground(R.drawable.header) 
      .withSelectionListEnabledForSingleProfile(false) 
      .addProfiles(userProfile) 
      .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() { 
       @Override 
       public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) { 
        return false; 
       } 
      }) 
      .build(); 

    if(userType.equalsIgnoreCase("Standard")) { 
     result = new DrawerBuilder() 
       .withActivity(this) 
       .withAccountHeader(headerResult) 
       .withToolbar(toolbar) 
       .withDisplayBelowStatusBar(false) 
       .withTranslucentStatusBar(true) 
       .withSavedInstance(savedInstanceState) 
       .withActionBarDrawerToggle(true) 
       .withActionBarDrawerToggleAnimated(true) 
       .addDrawerItems(home) 
       .addDrawerItems(profile) 
       .addDrawerItems(gallery) 
       .addDrawerItems(recognition) 
       .addDrawerItems(maps) 
       .addDrawerItems(tagAndLocate) 
       .addDrawerItems(gamesAndPuzzle) 
       .addDrawerItems(backup) 
       .addDrawerItems(new DividerDrawerItem()) 
       .addDrawerItems(logout) 
       .buildForFragment(); 

     result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
      @Override 
      public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 

       int drawItemId = (int) drawerItem.getIdentifier(); 
       Intent intent; 
       Fragment fragment; 
       switch (drawItemId) { 

        case 1: 
         fragment = new HomeFragment(); 
         Bundle bundle = new Bundle(); 
         bundle.putString("userType", userType); 
         fragment.setArguments(bundle); 
         gaFragmentStack.add(home); 
         break; 
        case 2: 
         fragment = new ProfileFragment(); 
         gaFragmentStack.add(profile); 
         break; 
        case 3: 
         fragment = new GalleryFragment(); 
         gaFragmentStack.add(gallery); 
         break; 
        case 4: 
         fragment = new RecognitionFragment(); 
         gaFragmentStack.add(recognition); 
         break; 
        case 5: 
         fragment = new MapsFragment(); 
         gaFragmentStack.add(maps); 
         break; 
        case 6: 
         fragment = new TagLocateFragment(); 
         gaFragmentStack.add(tagAndLocate); 
         break; 
        case 7: 
         fragment = new GamesPuzzlesFragment(); 
         gaFragmentStack.add(gamesAndPuzzle); 
         break; 
        case 8: 
         fragment = new BackupFragment(); 
         gaFragmentStack.add(backup); 
         break; 
        default: 
         fragment = new HomeFragment(); 
         break; 
       } 
       if (drawItemId == 9) { 
        FirebaseAuth.getInstance().signOut(); 
        SharedPreferences.Editor editor = preferences.edit(); 
        editor.clear(); 
        editor.apply(); 
        intent = new Intent(MainMenuActivity.this, SplashScreen.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        startActivity(intent); 
        finish(); 
       } 

       FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
       Bundle bundle = new Bundle(); 
       bundle.putString("userType", userType); 
       fragment.setArguments(bundle); 
       transaction.replace(R.id.container_gaFragments, fragment); 
       transaction.commit(); 
       return false; 
      } 
     }); 

    }else{ 
     result = new DrawerBuilder() 
       .withActivity(this) 
       .withAccountHeader(headerResult) 
       .withToolbar(toolbar) 
       .withDisplayBelowStatusBar(false) 
       .withTranslucentStatusBar(true) 
       .withSavedInstance(savedInstanceState) 
       .withActionBarDrawerToggle(true) 
       .withActionBarDrawerToggleAnimated(true) 
       .addDrawerItems(home) 
       .addDrawerItems(profile) 
       .addDrawerItems(maps) 
       .addDrawerItems(backup) 
       .addDrawerItems(new DividerDrawerItem()) 
       .addDrawerItems(logout) 
       .buildForFragment(); 

     result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
      @Override 
      public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 

       int drawItemId = (int) drawerItem.getIdentifier(); 
       Intent intent; 
       Fragment fragment; 
       switch (drawItemId) { 

        case 1: 
         fragment = new HomeFragment(); 
         Bundle bundle = new Bundle(); 
         bundle.putString("userType", userType); 
         fragment.setArguments(bundle); 
         gaFragmentStack.add(home); 
         break; 
        case 2: 
         fragment = new ProfileFragment(); 
         gaFragmentStack.add(profile); 
         break; 
        case 5: 
         fragment = new MapsFragment(); 
         gaFragmentStack.add(maps); 
         break; 
        case 8: 
         fragment = new BackupFragment(); 
         gaFragmentStack.add(backup); 
         break; 
        default: 
         fragment = new HomeFragment(); 
         break; 
       } 
       if (drawItemId == 9) { 
        FirebaseAuth.getInstance().signOut(); 
        SharedPreferences.Editor editor = preferences.edit(); 
        editor.clear(); 
        editor.apply(); 
        intent = new Intent(MainMenuActivity.this, SplashScreen.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        startActivity(intent); 
        finish(); 
       } 

       FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
       transaction.replace(R.id.container_gaFragments, fragment); 
       Bundle bundle = new Bundle(); 
       bundle.putString("userType", userType); 
       fragment.setArguments(bundle); 
       transaction.commit(); 
       return false; 
      } 
     }); 
    } 
} 

は、これは私が最初に

話していたスプラッシュ画面でSplashActivity.java

package com.project.group.projectga.activities; 

輸入android.content.Intent。 import android.os.Bundle;この場合

import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.project.group.projectga.R; 

public class SplashActivity extends CoreActivity { 

FirebaseAuth firebaseAuth; 
DatabaseReference databaseReference; 

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

    if (getUid() != null) { 
     final String userId = getUid(); 
     firebaseAuth = FirebaseAuth.getInstance(); 
     databaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(userId); 

     Thread splashThread = new Thread() { 
      public void run() { 
       try { 
        sleep(3000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } finally { 
        if (firebaseAuth.getCurrentUser() != null) { 
         Intent mainMenuIntent = new Intent(SplashActivity.this, MainMenuActivity.class); 
         startActivity(mainMenuIntent); 
         finish(); 
        } else { 
         Intent splashScreenIntent = new Intent(SplashActivity.this, SplashScreen.class); 
         startActivity(splashScreenIntent); 
         finish(); 
        } 
       } 
      } 
     }; 
     splashThread.start(); 
    } 
} 

}

、GETCURRENTUSERがnullでない場合、私はMainMenuActivityにユーザをリダイレクトします。それは私がSplashActivityからUSERTYPEを通過しないのか分からない

->>>> if(userType.equalsIgnoreCase("Standard")) { 
     result = new DrawerBuilder() 

初めて新規アカウント/ログインでない場合MainMenuActivityでこのコード行は、エラーを示します。助けてください!

+0

@IbrahimAli - なぜnullポインタがあるのか​​わかります!私はSplashActivityからuserTypeをどのように渡すのですか? –

+0

タイトルと本文は、この意図された質問と実際には一致しません。 – jdv

答えて

0

あなたは以下のようなことでユーザデータを送信する必要がありSplashActivity

から、意図データに
Intent mainMenuIntent = new Intent(SplashActivity.this, MainMenuActivity.class); 
         startActivity(mainMenuIntent); 

をユーザータイプを送信していない、

Intent mainMenuIntent = new Intent(SplashActivity.this, 
mainMenuIntent.putExtra("userType", [user type]); 
MainMenuActivity.class); 
          startActivity(mainMenuIntent); 
+0

Firebaseに格納されているuserTypeをSplashActivityで取得する方法を見つけるのは難しいので、目的に沿って渡すことができます!私たちを手伝ってくれますか? –

+0

firebaseからデータを取得するには、https://firebase.google.com/docs/database/android/read-and-write#listen_for_value_events –

+0

を参照してください。データを取得する方法を理解し、userTypeを正常に渡すことができました –

0

は、私はあなたのデータを取得するために、このコードを使用してrecomand第2の活動に戻る。

String userType = (String) getIntent().getExtras().get("userType"); 

希望します。

+0

Splashアクティビティは私の最初のアクティビティです。このアクティビティの仕事は、ユーザが既にログインしているかどうかをチェックすることです。だから私はこの活動でデータを取り戻すことはできません。私はデータベース参照を取得し、そこからuserTypeを取得する必要があります! –

関連する問題