приветствие, после изменения расположения java-классов в manafist, чтобы сделать первый макет LOGIN.JAVA для загрузки вместо Mainactivity.class, получить сбой приложения после входа в систему, также нет ошибок в отладчике, пожалуйста, примитепосмотрите на коды ниже: -
коды активности входа в систему: -
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.rozdoum.socialcomponents.R;
import com.rozdoum.socialcomponents.main.base.BaseActivity;
import com.rozdoum.socialcomponents.main.editProfile.createProfile.CreateProfileActivity;
import com.rozdoum.socialcomponents.main.main.MainActivity;
import com.rozdoum.socialcomponents.utils.GoogleApiHelper;
import com.rozdoum.socialcomponents.utils.LogUtil;
import com.rozdoum.socialcomponents.utils.LogoutHelper;
import java.util.Arrays;
public class LoginActivity extends BaseActivity<LoginView, LoginPresenter> implements LoginView, GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = LoginActivity.class.getSimpleName();
private static final int SIGN_IN_GOOGLE = 9001;
public static final int LOGIN_REQUEST_CODE = 10001;
EditText Email, Password;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private GoogleApiClient mGoogleApiClient;
String email, password;
private CallbackManager mCallbackManager;
private String profilePhotoUrlLarge;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_login);
Email = findViewById(R.id.editEmail);
Password = findViewById(R.id.editPassword);
Button emailBtn = findViewById( R.id.emailBtn );
emailBtn.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
emailsigninMethd();
}
} );
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
initGoogleSignIn();
initFirebaseAuth();
initFacebookSignIn();
}
private void initGoogleSignIn() {
mGoogleApiClient = GoogleApiHelper.createGoogleApiClient(this);
mAuth = FirebaseAuth.getInstance();
}
private void initFirebaseAuth() {
mAuth = FirebaseAuth.getInstance();
if (mAuth.getCurrentUser() != null) {
LogoutHelper.signOut(mGoogleApiClient, this);
}
mAuthListener = (FirebaseAuth firebaseAuth) -> {
final FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// Profile is signed in
LogUtil.logDebug(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
presenter.checkIsProfileExist(user.getUid());
setResult(RESULT_OK);
} else {
// Profile is signed out
LogUtil.logDebug(TAG, "onAuthStateChanged:signed_out");
}
};
}
private void initFacebookSignIn() {
mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
LogUtil.logDebug(TAG, "facebook:onSuccess:" + loginResult);
presenter.handleFacebookSignInResult(loginResult);
}
@Override
public void onCancel() {
LogUtil.logDebug(TAG, "facebook:onCancel");
}
@Override
public void onError(FacebookException error) {
LogUtil.logError(TAG, "facebook:onError", error);
showSnackBar(error.getMessage());
}
});
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
mGoogleApiClient.stopAutoManage(this);
mGoogleApiClient.disconnect();
}
}
@NonNull
@Override
public LoginPresenter createPresenter() {
if (presenter == null) {
return new LoginPresenter(this);
}
return presenter;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mCallbackManager.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == SIGN_IN_GOOGLE) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
presenter.handleGoogleSignInResult(result);
}
}
@Override
public void startCreateProfileActivity() {
Intent intent = new Intent(LoginActivity.this, CreateProfileActivity.class);
intent.putExtra(CreateProfileActivity.LARGE_IMAGE_URL_EXTRA_KEY, profilePhotoUrlLarge);
startActivity(intent);
}
@Override
public void firebaseAuthWithCredentials(AuthCredential credential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, task -> {
LogUtil.logDebug(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
presenter.handleAuthError(task);
}
});
}
@Override
public void setProfilePhotoUrl(String url) {
profilePhotoUrlLarge = url;
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// An unresolvable error has occurred and Google APIs (including Sign-In) will not
// be available.
LogUtil.logDebug(TAG, "onConnectionFailed:" + connectionResult);
showSnackBar(R.string.error_google_play_services);
hideProgress();
}
@Override
public void signInWithGoogle() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, SIGN_IN_GOOGLE);
}
@Override
public void signInWithFacebook() {
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("email", "public_profile"));
}
private void emailsigninMethd (){
email = Email.getText().toString().trim();
password = Password.getText().toString().trim();
if (TextUtils.isEmpty(email)) {
Toast.makeText(LoginActivity.this, "Enter the correct Email", Toast.LENGTH_SHORT).show();
return;
} else if (TextUtils.isEmpty(password)) {
Toast.makeText(LoginActivity.this, "Enter the correct password", Toast.LENGTH_SHORT).show();
return;
}
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Toast.makeText(LoginActivity.this, "Login not successfull", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(LoginActivity.this ,"check email verfied", Toast.LENGTH_SHORT).show();
}
}
});
}}
/// и вот мои коды основной деятельности: - //
import android.annotation.SuppressLint;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SimpleItemAnimator;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.rozdoum.socialcomponents.R;
import com.rozdoum.socialcomponents.adapters.PostsAdapter;
import com.rozdoum.socialcomponents.main.base.BaseActivity;
import com.rozdoum.socialcomponents.main.followPosts.FollowingPostsActivity;
import com.rozdoum.socialcomponents.main.post.createPost.CreatePostActivity;
import com.rozdoum.socialcomponents.main.postDetails.PostDetailsActivity;
import com.rozdoum.socialcomponents.main.profile.ProfileActivity;
import com.rozdoum.socialcomponents.main.search.SearchActivity;
import com.rozdoum.socialcomponents.model.Post;
import com.rozdoum.socialcomponents.utils.AnimationUtils;
public class MainActivity extends BaseActivity<MainView, MainPresenter> implements MainView {
private PostsAdapter postsAdapter;
private RecyclerView recyclerView;
private FloatingActionButton floatingActionButton;
private TextView newPostsCounterTextView;
private boolean counterAnimationInProgress = false;
private ProgressBar progressBar;
private SwipeRefreshLayout swipeContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initContentView();
}
@Override
protected void onResume() {
super.onResume();
presenter.updateNewPostCounter();
}
@NonNull
@Override
public MainPresenter createPresenter() {
if (presenter == null) {
return new MainPresenter(this);
}
return presenter;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case ProfileActivity.CREATE_POST_FROM_PROFILE_REQUEST:
refreshPostList();
break;
case CreatePostActivity.CREATE_NEW_POST_REQUEST:
presenter.onPostCreated();
break;
case PostDetailsActivity.UPDATE_POST_REQUEST:
presenter.onPostUpdated(data);
break;
}
}
}
@Override
public void onBackPressed() {
attemptToExitIfRoot(floatingActionButton);
}
public void refreshPostList() {
postsAdapter.loadFirstPage();
if (postsAdapter.getItemCount() > 0) {
recyclerView.scrollToPosition(0);
}
}
@Override
public void removePost() {
postsAdapter.removeSelectedPost();
}
@Override
public void updatePost() {
postsAdapter.updateSelectedPost();
}
@Override
public void showCounterView(int count) {
AnimationUtils.showViewByScaleAndVisibility(newPostsCounterTextView);
String counterFormat = getResources().getQuantityString(R.plurals.new_posts_counter_format, count, count);
newPostsCounterTextView.setText(String.format(counterFormat, count));
}
private void initContentView() {
if (recyclerView == null) {
progressBar = findViewById(R.id.progressBar);
swipeContainer = findViewById(R.id.swipeContainer);
initFloatingActionButton();
initPostListRecyclerView();
initPostCounter();
}
}
private void initFloatingActionButton() {
floatingActionButton = findViewById(R.id.addNewPostFab);
if (floatingActionButton != null) {
floatingActionButton.setOnClickListener(v -> presenter.onCreatePostClickAction(floatingActionButton));
}
}
private void initPostListRecyclerView() {
recyclerView = findViewById(R.id.recycler_view);
postsAdapter = new PostsAdapter(this, swipeContainer);
postsAdapter.setCallback(new PostsAdapter.Callback() {
@Override
public void onItemClick(final Post post, final View view) {
presenter.onPostClicked(post, view);
}
@Override
public void onListLoadingFinished() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onAuthorClick(String authorId, View view) {
openProfileActivity(authorId, view);
}
@Override
public void onCanceled(String message) {
progressBar.setVisibility(View.GONE);
showToast(message);
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
recyclerView.setAdapter(postsAdapter);
postsAdapter.loadFirstPage();
}
private void initPostCounter() {
newPostsCounterTextView = findViewById(R.id.newPostsCounterTextView);
newPostsCounterTextView.setOnClickListener(v -> refreshPostList());
presenter.initPostCounter();
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
hideCounterView();
super.onScrolled(recyclerView, dx, dy);
}
});
}
@Override
public void hideCounterView() {
if (!counterAnimationInProgress && newPostsCounterTextView.getVisibility() == View.VISIBLE) {
counterAnimationInProgress = true;
AlphaAnimation alphaAnimation = AnimationUtils.hideViewByAlpha(newPostsCounterTextView);
alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
counterAnimationInProgress = false;
newPostsCounterTextView.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
alphaAnimation.start();
}
}
@SuppressLint("RestrictedApi")
@Override
public void openPostDetailsActivity(Post post, View v) {
Intent intent = new Intent(MainActivity.this, PostDetailsActivity.class);
intent.putExtra(PostDetailsActivity.POST_ID_EXTRA_KEY, post.getId());
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
View imageView = v.findViewById(R.id.postImageView);
View authorImageView = v.findViewById(R.id.authorImageView);
ActivityOptions options = ActivityOptions.
makeSceneTransitionAnimation(MainActivity.this,
new android.util.Pair<>(imageView, getString(R.string.post_image_transition_name)),
new android.util.Pair<>(authorImageView, getString(R.string.post_author_image_transition_name))
);
startActivityForResult(intent, PostDetailsActivity.UPDATE_POST_REQUEST, options.toBundle());
} else {
startActivityForResult(intent, PostDetailsActivity.UPDATE_POST_REQUEST);
}
}
public void showFloatButtonRelatedSnackBar(int messageId) {
showSnackBar(floatingActionButton, messageId);
}
@Override
public void openCreatePostActivity() {
Intent intent = new Intent(this, CreatePostActivity.class);
startActivityForResult(intent, CreatePostActivity.CREATE_NEW_POST_REQUEST);
}
@SuppressLint("RestrictedApi")
@Override
public void openProfileActivity(String userId, View view) {
Intent intent = new Intent(MainActivity.this, ProfileActivity.class);
intent.putExtra(ProfileActivity.USER_ID_EXTRA_KEY, userId);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && view != null) {
View authorImageView = view.findViewById(R.id.authorImageView);
ActivityOptions options = ActivityOptions.
makeSceneTransitionAnimation(MainActivity.this,
new android.util.Pair<>(authorImageView, getString(R.string.post_author_image_transition_name)));
startActivityForResult(intent, ProfileActivity.CREATE_POST_FROM_PROFILE_REQUEST, options.toBundle());
} else {
startActivityForResult(intent, ProfileActivity.CREATE_POST_FROM_PROFILE_REQUEST);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.profile:
presenter.onProfileMenuActionClicked();
return true;
case R.id.followingPosts:
Intent followingPosts = new Intent(this, FollowingPostsActivity.class);
startActivity(followingPosts);
return true;
case R.id.search:
Intent searchIntent = new Intent(this, SearchActivity.class);
startActivity(searchIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
// отладчик //
W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@b5c67c0
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
I/FirebaseAuth: [FirebaseAuth:] Loading module via FirebaseOptions.
I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation
D/EGL_emulation: eglMakeCurrent: 0xe2d76720: ver 2 0 (tinfo 0xcffa5c00)
D/EGL_emulation: eglMakeCurrent: 0xe2d76720: ver 2 0 (tinfo 0xcffa5c00)
D/EGL_emulation: eglMakeCurrent: 0xe2d76720: ver 2 0 (tinfo 0xcffa5c00)
D/EGL_emulation: eglMakeCurrent: 0xe2d76720: ver 2 0 (tinfo 0xcffa5c00)
W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@b5c67c0
D/FirebaseAuth: Notifying id token listeners about user ( sa8FzUNdrZc6CxYZsHCZePvGxv32 ).
D/FirebaseAuth: Notifying auth state listeners about user ( sa8FzUNdrZc6CxYZsHCZePvGxv32 ).
D/FirebaseApp: Notifying auth state listeners.
D/FirebaseApp: Notified 1 auth state listeners.
D/LoginActivity: onAuthStateChanged:signed_in:sa8FzUNdrZc6CxYZsHCZePvGxv32
D/EGL_emulation: eglMakeCurrent: 0xe2d76720: ver 2 0 (tinfo 0xcffa5c00)
D/EGL_emulation: eglMakeCurrent: 0xe2d76720: ver 2 0 (tinfo 0xcffa5c00)
V/FA: Recording user engagement, ms: 49786
V/FA: Connecting to remote service
V/FA: Activity paused, time: 13689272
D/EGL_emulation: eglMakeCurrent: 0xe2d76720: ver 2 0 (tinfo 0xcffa5c00)
D/AutofillManager: onActivityFinishing(): calling cancelLocked()
D/ProfileInteractor: addRegistrationToken, success: true
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=49786, firebase_screen_class(_sc)=LoginActivity, firebase_screen_id(_si)=6492489375760132997}]
V/FA: Connection attempt already in progress
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 2
V/FA: Inactivity, disconnecting from the service