发布到 Play 商店后发生 Firebase 错误

时间:2021-02-05 01:24:23

标签: android firebase firebase-realtime-database google-play-services google-play-console

在我的 android studio 调试中没有任何问题,但是当我将应用发布到 Playstore 时,我的应用在启动画面后关闭。我的应用程序使用 firebase,我必须将 SHA-1 从 Playstore 添加到我的 firebase 项目。但仍然无法崩溃:

我从游戏控制台得到的这个错误:

    com.google.firebase.database.DatabaseException: 
  at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.<init> (CustomClassMapper.java:11)
  at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.loadOrCreateBeanMapperForClass (CustomClassMapper.java)
  at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean (CustomClassMapper.java:4)
  at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass (CustomClassMapper.java:4)
  at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass (CustomClassMapper.java:8)
  at com.google.firebase.database.DataSnapshot.getValue (DataSnapshot.java:8)
  at com.kepulcorporation.kepul.HomeFragment$10.onDataChange (HomeFragment.java:8)
  at com.google.firebase.database.core.ValueEventRegistration.fireEvent (ValueEventRegistration.java:2)
  at com.google.firebase.database.core.view.DataEvent.fire (DataEvent.java)
  at com.google.firebase.database.core.view.EventRaiser$1.run (EventRaiser.java:6)
  at android.os.Handler.handleCallback (Handler.java:751)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:154)
  at android.app.ActivityThread.main (ActivityThread.java:6121)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:889)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:779)

这是我的主要活动:

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Registry;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
import com.firebase.ui.storage.images.FirebaseImageLoader;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.storage.StorageReference;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private ActionBar actionBar;
    private NestedScrollView nested_scroll_view;

    private BottomSheetBehavior mBehavior;
    private BottomSheetDialog mBottomSheetDialog;
    private View bottom_sheet;
    private HorizontalScrollView horizontalScrollView;

    private Fragment fragment;
    private Fragment fragmenthome;
    private SessionManager sessionManager;
    RelativeLayout toolbar;
    LinearLayout content;
    NestedScrollView scrolllayout;
    ImageView home_icon, transaksi_icon, bantuan_icon, akun_icon;
    TextView home_text, transaksi_text, bantuan_text, akun_text;

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

        content = findViewById(R.id.list_category_item_dashboard);
        scrolllayout = findViewById(R.id.nested_scroll_view);
        //Set Theme
        Tools.setSystemBarColor(this, R.color.colorPrimary);

        sessionManager = new SessionManager(this);
        sessionManager.checkLogin(this);

        home_icon = findViewById(R.id.home_icon);
        transaksi_icon = findViewById(R.id.transaksi_icon);
        bantuan_icon = findViewById(R.id.bantuan_icon);
        akun_icon = findViewById(R.id.akun_icon);
        home_text = findViewById(R.id.home_text);
        transaksi_text = findViewById(R.id.transaksi_text);
        bantuan_text = findViewById(R.id.bantuan_text);
        akun_text = findViewById(R.id.akun_text);

        FirebaseMessaging.getInstance().getToken()
                .addOnCompleteListener(new OnCompleteListener<String>() {
                    @Override
                    public void onComplete(@NonNull Task<String> task) {
                        if (!task.isSuccessful()) {
//                            Toast.makeText(MainActivity.this, "Fetching FCM registration token failed", Toast.LENGTH_SHORT).show();
                            return;
                        }
                        // Get new FCM registration token
                        String token = task.getResult();
                        if(sessionManager.isLoggin())
                        {
                            save_fcm(token);
                        }
                    }
                });

        initComponent();
    }

    public void save_fcm(String token){
        HashMap<String, String> user;
        sessionManager = new SessionManager(MainActivity.this);
        user = sessionManager.getUserDetail();
        String email = user.get("EMAIL");
        String convertemail = email.replaceAll("\\.", "_");
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference tableuser = database.getReference("Users");
        tableuser.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String email = user.get("EMAIL");
                String convertemail = email.replaceAll("\\.", "_");
                Users users = snapshot.child(convertemail).getValue(Users.class);
                Map<String, Object> updates = new HashMap<String,Object>();
                updates.put("address", users.getAddress());
                updates.put("email", email);
                updates.put("name", users.getName());
                updates.put("password", users.getPassword());
                updates.put("phone", users.getPhone());
                updates.put("photo_profile_path", users.getPhoto_profile_path());
                updates.put("role_id", users.getRole_id());
                updates.put("point", users.getPoint());
                updates.put("token", token);
                updates.put("promosipush", users.getPromosipush());
                updates.put("promosiemail", users.getPromosiemail());
                updates.put("statuspush", users.getStatuspush());
                updates.put("statusemail", users.getStatusemail());
                tableuser.child(convertemail).setValue(updates);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

    private void initComponent() {
        nested_scroll_view = (NestedScrollView) findViewById(R.id.nested_scroll_view);
        fragment = new HomeFragment();
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment,
                fragment.getClass().getSimpleName()).commit();

        home_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.colorPrimary));
        home_text.setTextColor(this.getResources().getColor(R.color.colorPrimary));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        } else {
            Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();
        }
        return super.onOptionsItemSelected(item);
    }

    public void toHome(View view) {
        ViewAnimation.fadeOutIn(nested_scroll_view);
        if (sessionManager.isLoggin()){
            fragment = new HomeFragment();
        }
        else {
            fragment = new HomeFragment();
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment,
                fragment.getClass().getSimpleName()).commit();

        home_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.colorPrimary));
        home_text.setTextColor(this.getResources().getColor(R.color.colorPrimary));
        transaksi_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        transaksi_text.setTextColor(this.getResources().getColor(R.color.text));
        bantuan_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        bantuan_text.setTextColor(this.getResources().getColor(R.color.text));
        akun_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        akun_text.setTextColor(this.getResources().getColor(R.color.text));
    }

    public void toTransaksi(View view) {
        ViewAnimation.fadeOutIn(nested_scroll_view);
         if (sessionManager.isLoggin()){
            fragment = new TransaksiloginFragment();
        }
        else {
            fragment = new TransaksiFragment();
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment,
                fragment.getClass().getSimpleName()).commit();

        home_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        home_text.setTextColor(this.getResources().getColor(R.color.text));
        transaksi_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.colorPrimary));
        transaksi_text.setTextColor(this.getResources().getColor(R.color.colorPrimary));
        bantuan_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        bantuan_text.setTextColor(this.getResources().getColor(R.color.text));
        akun_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        akun_text.setTextColor(this.getResources().getColor(R.color.text));
    }

    public void toBantuan(View view){
        ViewAnimation.fadeOutIn(nested_scroll_view);
         if (sessionManager.isLoggin()){
            fragment = new BantuanFragment();
        }
        else {
            fragment = new BantuanFragment();
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment,
                fragment.getClass().getSimpleName()).commit();

        home_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        home_text.setTextColor(this.getResources().getColor(R.color.text));
        transaksi_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        transaksi_text.setTextColor(this.getResources().getColor(R.color.text));
        bantuan_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.colorPrimary));
        bantuan_text.setTextColor(this.getResources().getColor(R.color.colorPrimary));
        akun_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        akun_text.setTextColor(this.getResources().getColor(R.color.text));
    }

    public void toAkun(View view){
        ViewAnimation.fadeOutIn(nested_scroll_view);
         if (sessionManager.isLoggin()){
             fragment = new AkunLoginFragment();
        }
        else {
             fragment = new AkunFragment();
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment,
                fragment.getClass().getSimpleName()).commit();

        home_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        home_text.setTextColor(this.getResources().getColor(R.color.text));
        transaksi_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        transaksi_text.setTextColor(this.getResources().getColor(R.color.text));
        bantuan_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        bantuan_text.setTextColor(this.getResources().getColor(R.color.text));
        akun_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.colorPrimary));
        akun_text.setTextColor(this.getResources().getColor(R.color.colorPrimary));
    }


    public void toSell(View view) {
        ViewAnimation.fadeOutIn(nested_scroll_view);
        if (sessionManager.isLoggin()){
            startActivity(new Intent(MainActivity.this, JualsampahActivity.class));
        }
        else {
            fragment = new JualFragment();
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment,
                fragment.getClass().getSimpleName()).commit();

        home_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        home_text.setTextColor(this.getResources().getColor(R.color.text));
        transaksi_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        transaksi_text.setTextColor(this.getResources().getColor(R.color.text));
        bantuan_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        bantuan_text.setTextColor(this.getResources().getColor(R.color.text));
        akun_icon.setBackgroundTintList(this.getResources().getColorStateList(R.color.text));
        akun_text.setTextColor(this.getResources().getColor(R.color.text));
    }
}

这是我的 HomeFragment :

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Intent;
import android.media.Image;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.PagerSnapHelper;
import androidx.recyclerview.widget.RecyclerView;

import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.github.islamkhsh.CardSliderViewPager;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import org.w3c.dom.Text;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import de.hdodenhof.circleimageview.CircleImageView;
import ru.tinkoff.scrollingpagerindicator.ScrollingPagerIndicator;

public class HomeFragment extends Fragment {

    CardSliderViewPager cardSliderViewPager;
    private List<Category>listData;
    private List<Produk>listData1;
    private List<SliderData>sliderData;
    private RecyclerView rv;
    private CategoryAdapter adapter;
    private ProdukAdapter adapter1;
    private SliderAdapter sliderAdapter;
    private RecyclerView recyclerView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final View root =  inflater.inflate(R.layout.fragment_home, container, false);

        cardSliderViewPager = root.findViewById(R.id.viewPager);

        recyclerView = root.findViewById(R.id.product_recyclerview);
        rv = root.findViewById(R.id.category_recyclerview);
        rv.setHasFixedSize(true);
        rv.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
        listData=new ArrayList<>();
        listData1 = new ArrayList<>();
        sliderData = new ArrayList<>();

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference table = database.getReference("Category");
        table.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(isAdded())
                {
                    listData.clear();
                    for (DataSnapshot npsnapshot : snapshot.getChildren()){
                        Category l = npsnapshot.getValue(Category.class);
                        listData.add(l);
                    }
                    adapter=new CategoryAdapter(listData);
                    rv.setAdapter(adapter);
                    ScrollingPagerIndicator recyclerIndicator = root.findViewById(R.id.indicator2);
                    recyclerIndicator.attachToRecyclerView(rv);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

        final SessionManager sessionManager = new SessionManager(getActivity());
        HashMap<String, String> user = sessionManager.getUserDetail();
        String email = user.get("EMAIL");
        if(!sessionManager.isLoggin())
        {
            LinearLayout not_login = root.findViewById(R.id.not_login);
            LinearLayout login = root.findViewById(R.id.login);
            not_login.setVisibility(View.VISIBLE);
            login.setVisibility(View.GONE);
        }
        else {
            LinearLayout not_login = root.findViewById(R.id.not_login);
            LinearLayout login = root.findViewById(R.id.login);
            not_login.setVisibility(View.GONE);
            login.setVisibility(View.VISIBLE);
            FirebaseDatabase databaseuser = FirebaseDatabase.getInstance();
            DatabaseReference tableuseruser = databaseuser.getReference("Users");
            tableuseruser.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if(isAdded())
                    {
                        String convertemail = email.toString().replaceAll("\\.", "_").toString();
                        Users users = snapshot.child(convertemail).getValue(Users.class);
                        TextView point = root.findViewById(R.id.profile_point);
                        TextView name = root.findViewById(R.id.profile_name);
                        CircleImageView circleImageView = root.findViewById(R.id.profile_image);
                        name.setText(user.get("NAME"));
                        point.setText(users.getPoint().toString() + " Point");
                        if (user.get("PHOTO_PROFILE_PATH").equals(""))
                        {
                            Glide.with(getContext()).load("https://cdn.business2community.com/wp-content/uploads/2017/08/blank-profile-picture-973460_640.png").into(circleImageView);
                        }
                        else {
                            Glide.with(getContext()).load(user.get("PHOTO_PROFILE_PATH")).into(circleImageView);
                        }
                    }
                }
                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });
        }

        getbanner();

        FirebaseDatabase databasepro = FirebaseDatabase.getInstance();
        DatabaseReference tablepro = databasepro.getReference("Product");
        tablepro.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(isAdded())
                {
                    listData1.clear();
                    for (DataSnapshot npsnapshot : snapshot.getChildren()){
                        Produk l = npsnapshot.getValue(Produk.class);
                        listData1.add(l);
                    }
                    adapter1 = new ProdukAdapter((ArrayList<Produk>) listData1);
                    recyclerView.setAdapter(adapter1);
                    recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

        LinearLayout jual = root.findViewById(R.id.btn_jual);
        LinearLayout sedekah = root.findViewById(R.id.btn_sedekah);
        LinearLayout baitullah = root.findViewById(R.id.btn_baitullah);
        ImageView notif = root.findViewById(R.id.notif);

        ReddotNotif reddotNotif = new ReddotNotif(getContext());
        if(reddotNotif.isRedDot())
        {
            notif.setImageResource(R.drawable.ic_notify);
        }
        else {
            notif.setImageResource(R.drawable.ic_notif);
        }

        notif.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                reddotNotif.logout();
                startActivity(new Intent(getActivity(), HistorynotificationActivity.class));
            }
        });

        baitullah.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(sessionManager.isLoggin())
                {
                    startActivity(new Intent(getActivity(), MenujubaitullahActivity.class));
                }
                else {
                    Intent intent = new Intent(getActivity(), MustloginActivity.class);
                    intent.putExtra("type", "baitullah");
                    startActivity(intent);
                }
            }
        });

        jual.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(sessionManager.isLoggin())
                {
                    startActivity(new Intent(getActivity(), JualsampahActivity.class));
                }
                else {
                    Intent intent = new Intent(getActivity(), MustloginActivity.class);
                    intent.putExtra("type", "jual");
                    startActivity(intent);
                }
            }
        });

        sedekah.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Boolean login = false;
                if(sessionManager.isLoggin())
                {
                    startActivity(new Intent(getActivity(), SedekahsampahActivity.class));
                }
                else {
                    Intent intent = new Intent(getActivity(), MustloginActivity.class);
                    intent.putExtra("type", "sedekah");
                    startActivity(intent);
                }
            }
        });

        Button login = root.findViewById(R.id.login_button);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getActivity(), LoginActivity.class));
            }
        });

        TextView FAQ = root.findViewById(R.id.faq);
        String FAQTEXT = "Untuk informasi lebih lanjut, kunjungi halaman FAQ. <font color=#0098FF>di sini </font> ";
        FAQ.setText(Html.fromHtml(FAQTEXT));
        FAQ.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(getActivity(), FaqActivity.class));
            }
        });
        return root;
    }

    private void getbanner() {

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference table = database.getReference("Banner");
        table.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(isAdded())
                {
                    sliderData.clear();
                    for (DataSnapshot npsnapshot : snapshot.getChildren()){
                        SliderData l = npsnapshot.getValue(SliderData.class);
                        sliderData.add(l);
                    }
                    sliderAdapter = new SliderAdapter((ArrayList<SliderData>) sliderData);
                    cardSliderViewPager.setAdapter(sliderAdapter);
                    cardSliderViewPager.setSmallScaleFactor(0.9f);
                    cardSliderViewPager.setSmallAlphaFactor(0.5f);
                    cardSliderViewPager.setAutoSlideTime(5);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }
}

这是我的类别:

public class Category {
    private String id;
    private String name;
    private String picture_path;

    public Category(){
    }

    public Category(String id, String name, String picture_path) {
        this.id = id;
        this.name = name;
        this.picture_path = picture_path;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPicture_path() {
        return picture_path;
    }

    public void setPicture_path(String picture_path) {
        this.picture_path = picture_path;
    }
}

和数据库中的这个类别:

category database

你能帮我吗,我找了一个星期哪里出了问题,但还是找不到。

0 个答案:

没有答案