android - ClassNotFoundException DynamiteModuleInitializer Android

标签 android firebase firebase-realtime-database firebase-authentication

自从我更新了我的 android studio 和 sdk。这些错误立即开始发生并阻止我写入数据库中的一个 child ,我不知道问题是什么。但似乎当我试图从正在发生的“EditCarPostActivity” Activity 写入数据库时​​,我可以从其他 Activity 中完美地写入、更新和检索信息。请帮忙解决这个问题。我将在下面发布一些 Activity

错误 1

04-29 18:38:54.685 11007-11034/com.example.ahmad.carrental E/ChimeraFileApk: Failed to validate DexClassLoader. java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.chimera.DynamiteModuleInitializer" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib64, /vendor/lib64, /system/vendor/lib64, /product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

错误 2

04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental E/ChimeraModuleLdr: Failed to load code for module FileApk(/data/user_de/0/com.google.android.gms/app_chimera/m/0000002d/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk) ddp: Failed to load code for /data/user_de/0/com.google.android.gms/app_chimera/m/0000002d/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk

错误 3

04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental W/ChimeraDebugLogger: Singleton logger instance not set. 04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental E/DynamiteLoaderV2: Failed to create module context. ddp: Failed to load code for /data/user_de/0/com.google.android.gms/app_chimera/m/0000002d/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk

EditCarPostActivity

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

    initialization();
    setupFirebaseAuth();
    setUpLocationSpinner();
    userID = mAuth.getCurrentUser().getUid();


    //Assigning Car object with its data from database.
    Observable.create(new ObservableOnSubscribe() {
        @Override
        public void subscribe(ObservableEmitter emitter) throws Exception {
            singleValueEventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    car = mFirebaseUtilities.getCarByUserID(userID,dataSnapshot);
                    editCarPostPresenter.populateViews(car);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.e(TAG, "CANCELLED.");
                }
            };
            mDatabaseReference.addValueEventListener(singleValueEventListener);
        }
    }).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe();

    //Save all the changes when done editing to database.
    checkButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editCarPostPresenter.onSaveChanges(car);
        }
    });

    //When user click image button, start image selection from gallery
    tvImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent,GALLERY_INT);
        }
    });

}

/**
 * Will listen for user image selection and will store the selected image in a uri object, then call getUriImage to update it
 * When the user finishes editing and clicks the check button along with any change in car information to the database.
 * @param requestCode
 * @param resultCode
 * @param data
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == GALLERY_INT && resultCode == RESULT_OK){

        mProgressDialog.setMessage("Uploading .....");
        mProgressDialog.show();
        Uri uri  = data.getData();

        storagePathReference = mStorageReference.child("Photos").child(userID).child(uri.getLastPathSegment());

        //Update all the information with the image given as Uri
        storagePathReference.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    Toast.makeText(mContext,"Image Upload success!",Toast.LENGTH_SHORT).show();
                    mProgressDialog.dismiss();

                    downloadImageUri = taskSnapshot.getDownloadUrl();
                    Picasso.get().load(downloadImageUri).fit().centerCrop().into(ivCarPicture);
                }
            });
    }
}

public void deleteUnusedImages(Car car){
    car = this.car;
    String imageID = car.getPicture();
    for(int i = 0;i<6;i++){

    }

}


//initalizing everything necessary here
public void initialization(){
    mContext = getApplicationContext();
    editCarPostPresenter = new EditCarPostPresenter(this,this);

    //Adapter set up for spinners
    mArrayAdapter2 = ArrayAdapter.createFromResource(this,R.array.car_brands,android.R.layout.simple_spinner_item);
    mArrayAdapter = ArrayAdapter.createFromResource(this,R.array.car_status_array,android.R.layout.simple_spinner_item);

    //Status spinner set up
    statusSpinner = findViewById(R.id.createPostCarStatusSpinner_ID);
    statusSpinner.setAdapter(mArrayAdapter);
    statusSpinner.setOnItemSelectedListener(this);
    //Brand spinner set up
    brandSpinner = findViewById(R.id.createPostCarBrandSpinner_ID);
    brandSpinner.setAdapter(mArrayAdapter2);
    brandSpinner.setOnItemSelectedListener(this);

    layoutContainer = findViewById(R.id.createPostLinearLayout_ID);
    tvDistance = new TextView(this);
    tvDistance.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    tvDistance.setText("Distance Travelled");
    etDistance = new EditText(this);
    etDistance.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

    //margin settings editText
    layoutParamsEt = (LinearLayout.LayoutParams)etDistance.getLayoutParams();
    layoutParamsEt.setMargins(0,10,0,0);
    etDistance.setLayoutParams(layoutParamsEt);

    //margin settings textView
    layoutParamsTv = (LinearLayout.LayoutParams)tvDistance.getLayoutParams();
    layoutParamsTv.setMargins(0,10,0,0);
    tvDistance.setLayoutParams(layoutParamsTv);

    ivCarPicture = findViewById(R.id.createPostCarPic_ID);
    tvImageButton = findViewById(R.id.createPostCarLinkPic_ID);
    etCarLocation = findViewById(R.id.createPostCarLocation_ID);
    etDescription = findViewById(R.id.createPostCarDes_ID);
    etPrice = findViewById(R.id.createPostCarPrice_ID);
    etModel = findViewById(R.id.createPostCarModel_ID);
    checkButton = findViewById(R.id.check_ID);
    mFirebaseUtilities = new FirebaseUtilities(this);
    mStorageReference = FirebaseStorage.getInstance().getReference();
    mProgressDialog = new ProgressDialog(this);
}

private void setUpLocationSpinner() {

    ArrayAdapter<String> listOfCities = new ArrayAdapter<>(getBaseContext(),
            android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.TR_cities));

    //--- to ensure user is restricted to selections from drop-down menu
    etCarLocation.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            carLoactionStr = etCarLocation.getAdapter().getItem(position).toString();
        }
    });

    etCarLocation.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            for (int i = 0; i < etCarLocation.getAdapter().getCount(); i++) {
                if (etCarLocation.getText().toString().equals(etCarLocation.getAdapter().getItem(i))) {
                    carLoactionStr = etCarLocation.getAdapter().getItem(i).toString();
                } else
                    carLoactionStr = null;
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });


    //start autocomplete after 1 letter
    etCarLocation.setThreshold(1);
    etCarLocation.performCompletion();
    etCarLocation.setAdapter(listOfCities);
}

/**
 * Listener for car status spinner and brand spinner
 * @param parent
 * @param view
 * @param position
 * @param id
 */
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Spinner spinner = (Spinner)parent;

    if(spinner.getId() == R.id.createPostCarStatusSpinner_ID){
        TextView textView = (TextView) view;
        carStatusStr = textView.getText().toString();
        addDynamicViews(position);
    }
    else if(spinner.getId() == R.id.createPostCarBrandSpinner_ID){
        TextView textView = (TextView) view;
        carBrandStr = textView.getText().toString();
    }

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

/**
 * Dynamic views creation done by handling user spinner selection for first hand or second hand car status.
 *@param position: position of selected value from spinner
 */
public void addDynamicViews(int position){
   /*
   * it crashes if you change from first hand to second hand twice at the same time. so dont do it*/
    if(position == 1){
        layoutContainer.addView(tvDistance);
        layoutContainer.addView(etDistance);
    }
    else if(position == 0){
        Log.i(TAG,"entering");
       //mFirebaseUtilities.removeNodeDynamically();
        layoutContainer.removeView(tvDistance);
        layoutContainer.removeView(etDistance);
    }
}

@Override
public void setBrand(String brand) {
    int spinnerPos = mArrayAdapter.getPosition(brand);
    brandSpinner.setSelection(spinnerPos);
}

@Override
public void setPrice(int price) {
    etPrice.setText(String.valueOf(price));
}

@Override
public void setLocation(String location) {
    etCarLocation.setText(location);
}

@Override
public void setDescription(String description) {
    etDescription.setText(description);
}

@Override
public void setModel(String model) {
    etModel.setText(model);
}

@Override
public void setDistance(String distance) {
    etDistance.setText(distance);
}

@Override
public void setStatus(String status) {
    int spinnerPos = mArrayAdapter.getPosition(status);
    statusSpinner.setSelection(spinnerPos);
}

@Override
public void setPicture(String picture) {
   Picasso.get().load(picture).fit().centerCrop().into(ivCarPicture);
}

@Override
public String getBrand() {
    return carBrandStr;
}

@Override
public String getDescription() {
    return etDescription.getText().toString();
}

@Override
public String getLocation() {
    return carLoactionStr;
}

@Override
public String getModel() {
    return etModel.getText().toString();
}

@Override
public String getStatus() {
    return carStatusStr;
}

@Override
public String getPicture() {
    return downloadImageUri.toString();
}

@Override
public int getPrice() {
    String priceViewTemp = etPrice.getText().toString();
    if (priceViewTemp.equals("")) {
        return 0;
    } else {
        return Integer.valueOf(etPrice.getText().toString());
    }
}

@Override
public String getDistance() {
    String distanceViewTemp = etDistance.getText().toString();
    if (distanceViewTemp.equals("")) {
        return "0";
    } else {
        return etDistance.getText().toString();
    }
}

/*************************************** Firebase *******************************************/
private void setupFirebaseAuth() {
    mAuth = FirebaseAuth.getInstance();

    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mDatabaseReference = mFirebaseDatabase.getReference();

    mAuthStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();

            if (user != null) {
                //User is signed in
                Log.d(TAG, "onAuthStateChanged: user signed in : " + user.getUid());
            } else {
                //User is signed out
                Log.d(TAG, "onAuthStateChanged: user signed out");
            }
        }
    };

    mDatabaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
@Override
public void onPause() {
    super.onPause();
    if (singleValueEventListener != null) {
        mDatabaseReference.removeEventListener(singleValueEventListener);
    }
}
@Override
public void onResume(){
    super.onResume();
    mDatabaseReference.addListenerForSingleValueEvent(singleValueEventListener);
}

如果您需要更多信息,可以询问。是的,我的 firebase 身份验证以及存储和实时数据库都已启用

最佳答案

我在我的华为设备(搭载 Android 7.0 的 P9 Lite)上遇到了同样的问题,要解决这个问题,只需删除当前安装的 Google Play 服务版本,将其恢复为我们设备附带的默认版本(这可以是通过设置应用程序完成)。 然后重新启动您的设备,并将 Google Play 服务应用程序更新到最新版本。然后运行您的应用程序,它应该可以工作。

关于android - ClassNotFoundException DynamiteModuleInitializer Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50088510/

相关文章:

Firebase:如何将客户端 SDK 连接到本地服务的云功能?

java - 从数据库中计算产品时 Firebase 变慢 (Android)

android - 未显示首选项 - 首选项 fragment

android - 在 Jetpack Compose 不可组合函数中获取上下文

android - 如何将项目添加到 android 选择的 TextView 上的弹出式复制/粘贴菜单中?

android - java.lang.ClassNotFoundException 与 com.google.android.gms.measurement.internal.UserAttributeParcel

javascript - Firebase 返回快照但无法访问值

javascript - 在监听更改时查询多个键 - Firebase

android - 如何修复 'Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for the main artifact of variant:'

Android Facebook SDK 让用户无法登录?