java.lang.StackOverflowError:堆栈大小8MB

时间:2017-02-22 12:22:55

标签: android android-fragments stack-overflow fragmenttransaction

提前致谢。

我知道这个问题已经解决,但我找不到问题的答案。

首先,我将向您展示我的所有活动文件和片段文件。

1)LoginActivity ...(最终用户登录的地方)

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity {

private FirebaseAuth mAuth;
Button signUpBtn,loginBtn;
EditText loginEt,passwordEt;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    mAuth = FirebaseAuth.getInstance();
    loginEt=(EditText)findViewById(R.id.emailLoginEt);
    passwordEt=(EditText)findViewById(R.id.passwordLoginEt);

    signUpBtn= (Button)findViewById(R.id.signUpBtn);

    signUpBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(LoginActivity.this, "Welcome to SignUpActivity",
                    Toast.LENGTH_SHORT).show();
            startActivity(new Intent(getApplicationContext(), SignupActivity.class));
        }
    });

    loginBtn=(Button)findViewById(R.id.loginBtn);

    loginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String email = loginEt.getText().toString();
            final String password = passwordEt.getText().toString();

            if (TextUtils.isEmpty(email)) {
                Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
                return;
            }

            if (TextUtils.isEmpty(password)) {
                Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
                return;
            }

            //authenticate user
            mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {

                            if (!task.isSuccessful()) {
                                // there was an error
                                if (password.length() < 6) {
                                    passwordEt.setError(getString(R.string.minimum_password));
                                } else {
                                    Log.e("error auth",getString(R.string.auth_failed));
                                    Toast.makeText(getApplicationContext(), getString(R.string.auth_failed), Toast.LENGTH_LONG).show();
                                }
                            } else {
                                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                                startActivity(intent);
                                finish();
                            }
                        }
                    });
        }
    });

}


}

2)activity_login.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_login"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.talarir.mapproject.LoginActivity">

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:hint="Email-ID"
    android:ems="10"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="68dp"
    android:id="@+id/emailLoginEt" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:hint="password"
    android:ems="10"
    android:layout_below="@+id/emailLoginEt"
    android:layout_alignStart="@+id/emailLoginEt"
    android:layout_marginTop="67dp"
    android:id="@+id/passwordLoginEt" />

<Button
    android:text="LOGIN"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="67dp"
    android:id="@+id/loginBtn"
    android:layout_below="@+id/passwordLoginEt"
    android:layout_centerHorizontal="true" />


<Button
    android:text="SignUp?"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@null"
    android:layout_alignStart="@+id/loginBtn"
    android:layout_marginBottom="37dp"
    android:id="@+id/signUpBtn" />
</RelativeLayout>

3)MainActivity.java ...我根据用户(即管理员或普通用户)填充片段

import android.app.Fragment;
import android.app.FragmentManager;

import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class MainActivity extends AppCompatActivity {

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

    userValidation();

}



private void userValidation()
{
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if (user != null) {

        String email = user.getEmail();

        String uid = user.getUid();


        if (checkForRavi(email,uid))
        {
            Toast.makeText(this,"ADMIN",Toast.LENGTH_SHORT).show();
            FragmentManager fragmentManager=getFragmentManager();
            FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.mainFragment,new AdminFragment(),"adminFrag");//admin..add
            fragmentTransaction.commit();
        }
        if (!checkForRavi(email,uid))
        {
            Toast.makeText(this,"user",Toast.LENGTH_SHORT).show();
            FragmentManager fragmentManager=getFragmentManager();
            FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.mainFragment,new NonAdminFragment(),"nonAdminFrag");
            fragmentTransaction.commit();
        }

    }

}

private boolean checkForRavi(String email, String uid)
{
    if(email.equals("ravi@gmail.com"))
    {
        return true;
    }
    return false;
}
}

4)activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.talarir.mapproject.MainActivity">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/mainFragment"
    />

</RelativeLayout>

5)NonAdminFragment.java

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

/**
 * Created by talarir on 20/02/2017.
 */

public class NonAdminFragment extends Fragment {
    @Nullable
View view;
GetSetLocation getSetLocation;

private DatabaseReference mFirebaseDatabase;
private FirebaseDatabase mFirebaseInstance;

private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view= inflater.inflate(R.layout.non_admin_fragment, container, false);

    getSetLocation=new GetSetLocation(10,10);

    return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener()
    {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth)
        {

            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                // User is signed in
                Log.d("CooActivity", "onAuthStateChanged:signed_in:" + user.getUid());
                fireDataInput(user, getSetLocation);

            } else {

                Log.d("CooActivity", "onAuthStateChanged:signed_out");
                startActivity(new Intent(getActivity().getApplicationContext(), LoginActivity.class));
                getActivity().finish();

            }
        }
    };
}

public void fireDataInput(FirebaseUser user, GetSetLocation getSetLocation)
{
    mFirebaseInstance = FirebaseDatabase.getInstance();
    mFirebaseDatabase = mFirebaseInstance.getReference("users");
    mFirebaseDatabase.child(user.getUid()).setValue(getSetLocation);
}

private class GetSetLocation
{
    private int lat,lng;

    public GetSetLocation()
    {

    }
    public  GetSetLocation(int lat,int lng)
    {
        this.lat=lat;
        this.lng=lng;
    }

    public int getLat()
    {
        return lat;
    }
    public int getLng()
    {
        return lng;
    }


}

@Override
public void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}

}

6)non_admin_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">

<TextView
    android:text="USER"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:textColor="@color/colorPrimary"
    android:textSize="40dp"
    android:textStyle="bold"
    android:id="@+id/textView2" />
</RelativeLayout>

我知道我已经提出了一切。我有点贪心让这个问题得到解决。

我的问题:程序运行正常,直到fireDataInput()方法开始触发。执行此方法后,我得到stackOverFlow异常:(。而且我的数据也没有上传到FIREBASE实时数据库。

Error Log:

    FATAL EXCEPTION: main
                  Process: com.example.talarir.mapproject, PID: 32045
                  java.lang.StackOverflowError: stack size 8MB
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
E/AndroidRuntime:     at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
                      at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
                      at com.google.android.gms.internal.zzbqi.zzax(Unknown......
Application terminated.

0 个答案:

没有答案