从图库中选择图像时活动崩溃仅限 Google 登录

问题描述

我的应用程序有 2 个登录选项,一个是普通 FireBase 电子邮件身份验证,另一个是 Google 登录选项,当我使用电子邮件身份验证从图库中选择图像时,它工作正常,但是当我使用 Google 登录选择它时,该特定活动关闭并返回到我的登录页面

以下是 Fragment 所在活动的代码 -

package com.example.projectcrest.pages;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.fragment.app.Fragment;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;

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.Button;

import com.example.projectcrest.ImplementFirebaseActions;
import com.example.projectcrest.R;
import com.example.projectcrest.fragments.auction_add;
import com.example.projectcrest.fragments.auction_list;
import com.example.projectcrest.fragments.home_page;
import com.example.projectcrest.fragments.profile;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import org.jetbrains.annotations.NotNull;

public class LandingPage extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private FirebaseAuth firebase;
    BottomNavigationView bottom_navView;
    NavigationView navigationView;
    private DrawerLayout drawerLayout;
    ImplementFirebaseActions fa;

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

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

        fa = new ImplementFirebaseActions();
        firebase = FirebaseAuth.getInstance();
        FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

        drawerLayout = findViewById(R.id.landing_page_body_drawerLayout);
        navigationView = findViewById(R.id.nav_view);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        if (firebaseUser != null) {
            String email = firebaseUser.getEmail();
            Log.d("Email Is:",email);
        }

        bottom_navView = findViewById(R.id.bottom_navbar);
        bottom_navView.setSelectedItemId(R.id.bottom_navbar_home);

        navigationView.setNavigationItemSelectedListener(this);


        bottom_navView.setonNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Fragment fragment = null;
                switch (item.getItemId()) {

                    case R.id.bottom_navbar_home:
                        fragment = new home_page();
                        break;

                    case R.id.bottom_navbar_aucAdd:
                        fragment = new auction_add();
                        break;

                    case R.id.bottom_navbar_aucList:
                        fragment = new auction_list();
                        break;

                }
                getSupportFragmentManager().beginTransaction().replace(R.id.landing_page_fragment_position,fragment).commit();

                return true;
            }
        });

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.landing_page_fragment_position,new home_page()).commit();

        }


    }

    @Override
    public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {
        Toolbar toolbar = findViewById(R.id.toolbar);
        switch (item.getItemId()) {
            case R.id.side_navbar_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.landing_page_fragment_position,new profile()).commit();
                toolbar.setTitle("Profile");
                break;
            case R.id.side_navbar_logout:
                try {
                    fa.signOut(this);
                } catch (Exception e) {
                    FirebaseAuth.getInstance().signOut();
                }
                Intent i = new Intent(getApplicationContext(),MainActivity.class);
                i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(i);
                break;
        }
        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    public void onBackpressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        } else {
            super.onBackpressed();
        }
    }
}

图库选择器所在的片段代码 -

public class auction_add extends Fragment {

    FirebaseAuth firebaseAuth;

    private static final int SELECT_PICTURE = 10;
    private static final int PERMISSION_CODE = 11;
    ImageButton auction_add_imageViewButton;

    FirebaseStorage storage;
    StorageReference storageReference;


    //References to all Auction Add Page EditText
    EditText auction_add_itemNameTxt;
    EditText auction_add_descriptionTxt;
    EditText auction_add_initialPriceTxt;
    EditText auction_add_startTimeTxt;
    EditText auction_add_endTimeTxt;

    Button auction_add_submit;

    //Reference to ImageView
    private ImageView auction_add_image;

    final Calendar myCalendar = Calendar.getInstance();

    // Todo: Rename parameter arguments,choose names that match
    // the fragment initialization parameters,e.g. ARG_ITEM_NUMBER
    private static final String ARG_ParaM1 = "param1";
    private static final String ARG_ParaM2 = "param2";

    // Todo: Rename and change types of parameters
    private String mParam1;
    private String mParam2;
    private Uri imageUri;


    public auction_add() {
        // required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment auction_add.
     */
    // Todo: Rename and change types and number of parameters
    public static auction_add newInstance(String param1,String param2) {
        auction_add fragment = new auction_add();
        Bundle args = new Bundle();
        args.putString(ARG_ParaM1,param1);
        args.putString(ARG_ParaM2,param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_ParaM1);
            mParam2 = getArguments().getString(ARG_ParaM2);
        }
    }

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

        auction_add_imageViewButton = v.findViewById(R.id.auction_add_imageView_button);
        auction_add_submit = v.findViewById(R.id.auction_add_submit_btn);

        auction_add_submit.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View buttonView) {
                imageSelectAction(v);
            }
        });

        auction_add_imageViewButton.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View buttonView) {
                imageSelectAction(v);
            }
        });

        dateTimeAction(v);

        return v;
    }

    private void imageSelectAction(View v) {
        auction_add_image = v.findViewById(R.id.auction_add_imageView);

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,""),SELECT_PICTURE);

    }


    @Override
    public void onActivityResult(int requestCode,int resultCode,@Nullable Intent data) {
        super.onActivityResult(requestCode,resultCode,data);

        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                if (data != null && data.getData() != null) {
                    Uri selectedImageUri = data.getData();

                    auction_add_image.setimageURI(selectedImageUri);
                }
            }
        }
    }

    private void uploadImage() {
        storage = FirebaseStorage.getInstance();
        storageReference = storage.getReference();
    }

    private void dateTimeAction(View v) {
        auction_add_startTimeTxt = v.findViewById(R.id.auction_add_startTimePicker);
        auction_add_endTimeTxt = v.findViewById(R.id.auction_add_endTimePicker);

        auction_add_startTimeTxt.setInputType(InputType.TYPE_NULL);

        auction_add_startTimeTxt.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDateTimeDialog(auction_add_startTimeTxt);
            }
        });

        auction_add_endTimeTxt.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDateTimeDialog(auction_add_endTimeTxt);
            }
        });
    }

    private void showDateTimeDialog(EditText timeTxt) {
        final Calendar calendar = Calendar.getInstance();
        DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view,int year,int month,int dayOfMonth) {
                calendar.set(Calendar.YEAR,year);
                calendar.set(Calendar.MONTH,month);
                calendar.set(Calendar.DAY_OF_MONTH,dayOfMonth);

                TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() {
                    @RequiresApi(api = Build.VERSION_CODES.N)
                    @Override
                    public void onTimeSet(TimePicker view,int hourOfDay,int minute) {
                        calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
                        calendar.set(Calendar.MINUTE,minute);

                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-MM-dd HH:mm");

                        timeTxt.setText(simpleDateFormat.format(calendar.getTime()));
                    }
                };

                new TimePickerDialog(getContext(),timeSetListener,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),false).show();
            }
        };

        new DatePickerDialog(getContext(),dateSetListener,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();
    }
}

编辑1: LogCat 的片段

2021-05-26 01:14:46.513 32497-32497/com.google.android.documentsui E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-05-26 01:14:46.617 32497-32497/com.google.android.documentsui E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-05-26 01:14:46.687 32497-32497/com.google.android.documentsui E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-05-26 01:14:47.444 32497-32497/com.google.android.documentsui E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-05-26 01:14:47.669 32497-32497/com.google.android.documentsui E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-05-26 01:14:47.891 32497-32497/com.google.android.documentsui E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-05-26 01:14:51.683 706-5114/com.android.systemUI E/ndroid.systemu: importBufferImpl:237 Failed with 'Error3::NO_RESOURCES'
2021-05-26 01:14:51.684 706-5114/com.android.systemUI E/GraphicBuffer: unflatten: registerBuffer Failed: UnkNown error -5 (5)
2021-05-26 01:14:51.684 706-4813/com.android.systemUI E/ndroid.systemu: importBufferImpl:237 Failed with 'Error3::NO_RESOURCES'
2021-05-26 01:14:51.684 706-4813/com.android.systemUI E/GraphicBuffer: unflatten: registerBuffer Failed: UnkNown error -5 (5)
2021-05-26 01:14:52.805 1746-1916/com.google.android.googlequicksearchBox E/MDD: DownloadProgressMonitor: Can't find file group for uri: android://com.google.android.googlequicksearchBox/files/sharedminusonemodule/shared/SharedMinusOneData.pb.tmp
2021-05-26 01:15:29.860 492-492/? E/netmgr: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:network' service: Invalid argument
2021-05-26 01:15:29.860 492-492/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2021-05-26 01:15:38.829 494-494/? E/wifi_forwarder: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:wififorward' service: Invalid argument
2021-05-26 01:15:38.829 494-494/? E/wifi_forwarder: RemoteConnection Failed to initialize: RemoteConnection Failed to open pipe
2021-05-26 01:16:29.922 492-492/? E/netmgr: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:network' service: Invalid argument
2021-05-26 01:16:29.922 492-492/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2021-05-26 01:16:38.878 494-494/? E/wifi_forwarder: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:wififorward' service: Invalid argument
2021-05-26 01:16:38.878 494-494/? E/wifi_forwarder: RemoteConnection Failed to initialize: RemoteConnection Failed to open pipe
2021-05-26 01:17:29.946 492-492/? E/netmgr: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:network' service: Invalid argument
2021-05-26 01:17:29.946 492-492/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2021-05-26 01:17:38.880 494-494/? E/wifi_forwarder: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:wififorward' service: Invalid argument
2021-05-26 01:17:38.880 494-494/? E/wifi_forwarder: RemoteConnection Failed to initialize: RemoteConnection Failed to open pipe
2021-05-26 01:18:29.948 492-492/? E/netmgr: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:network' service: Invalid argument
2021-05-26 01:18:29.948 492-492/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2021-05-26 01:18:38.882 494-494/? E/wifi_forwarder: qemu_pipe_open_ns:62: Could not connect to the 'pipe:qemud:wififorward' service: Invalid argument
2021-05-26 01:18:38.882 494-494/? E/wifi_forwarder: RemoteConnection Failed to initialize: RemoteConnection Failed to open pipe

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)