ClassNotFoundException动态模块初始值设定项Android

ClassNotFoundException动态模块初始值设定项Android,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,因为我更新了我的android studio和sdk。这些错误立即开始发生,阻止了我向数据库中的一个孩子写信,我不知道问题出在哪里。但是,当我试图从正在发生的“EditCarPostActivity”活动写入数据库时,从其他活动中,我似乎可以完美地写入、更新和检索信息。请帮我解决这个问题。我将在下面发布一些活动 错误1 04-29 18:38:54.685 11007-11034/com.example.ahmad.carrental E/ChimeraFileApk:未能验证DexClassL

因为我更新了我的android studio和sdk。这些错误立即开始发生,阻止了我向数据库中的一个孩子写信,我不知道问题出在哪里。但是,当我试图从正在发生的“EditCarPostActivity”活动写入数据库时,从其他活动中,我似乎可以完美地写入、更新和检索信息。请帮我解决这个问题。我将在下面发布一些活动

错误1

04-29 18:38:54.685 11007-11034/com.example.ahmad.carrental E/ChimeraFileApk:未能验证DexClassLoader。 java.lang.ClassNotFoundException:在以下路径中未找到类“com.google.android.gms.chimera.DynamicModuleInitializer”:DexPathList[],nativelLibraryDirectory=[/system/lib64,/vendor/lib64,/system/vendor/lib64,/product/lib64]] 位于dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

错误2

04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental E/ChimeraModuleLdr:未能加载模块文件apk的代码(/data/user_de/0/com.google.android.gms/app_chimera/m/0000002d/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk) ddp:未能加载/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:未设置单例记录器实例。 04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental E/DynamicLoaderv2:未能创建模块上下文。 ddp:未能加载/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);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u edit\u car\u post);
初始化();
setupFirebaseAuth();
setUpLocationSpinner();
userID=mAuth.getCurrentUser().getUid();
//使用数据库中的数据指定Car对象。
创建(新的ObservableOnSubscribe(){
@凌驾
public void subscribe(observeItemer发射器)引发异常{
singleValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
car=mFirebaseUtilities.getCarByUserID(用户ID,dataSnapshot);
editCarPostPresenter.PopulateView(car);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.e(标签“已取消”);
}
};
mDatabaseReference.addValueEventListener(singleValueEventListener);
}
}).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe();
//编辑完数据库后保存所有更改。
checkButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
editCarPostPresenter.onSaveChanges(car);
}
});
//当用户单击“图像”按钮时,从库中开始图像选择
tvImageButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(意向、行动和选择);
intent.setType(“image/*”);
startActivityForResult(国际画廊意向);
}
});
}
/**
*将侦听用户图像选择并将所选图像存储在uri对象中,然后调用getUriImage对其进行更新
*当用户完成编辑并单击check(检查)按钮时,车辆信息中的任何更改都会显示在数据库中。
*@param请求代码
*@param resultCode
*@param数据
*/
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==GALLERY\u INT&&resultCode==RESULT\u OK){
设置消息(“上传…”);
mProgressDialog.show();
Uri=data.getData();
storagePathReference=mStorageReference.child(“照片”).child(userID).child(uri.getLastPathSegment());
//使用作为Uri提供的图像更新所有信息
storagePathReference.putFile(uri).addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
Toast.makeText(mContext,“图像上传成功!”,Toast.LENGTH_SHORT.show();
mProgressDialog.disclose();
downloadImageUri=taskSnapshot.getDownloadUrl();
Picasso.get().load(downloadImageUri.fit().centerCrop().into(ivCarPicture);
}
});
}
}
公共无效删除未使用的图像(汽车){
车=这辆车;
字符串imageID=car.getPicture();

对于(int i=0;i我在我的华为设备(android 7.0的P9 Lite)上也遇到了同样的问题,要解决这个问题,只需删除当前安装的Google Play Services版本,将其恢复为我们设备附带的默认版本(这可以通过设置应用程序完成)。
然后重新启动您的设备,并将Google Play Services应用程序更新至最新版本。然后运行您的应用程序,它应该可以正常工作。

我在我的华为设备(android 7.0的P9 Lite)上遇到了同样的问题,我通过在设置-->应用程序-->谷歌播放服务-->存储中清除缓存解决了这个问题

我希望这对你有帮助。
干杯!

我的荣誉STF-L09也遇到了同样的问题。我通过将google play服务更新为测试版解决了这个问题,因为华为和荣誉设备上的当前版本存在已知问题

请参阅下面的说明