ClassNotFoundException DynamiteModuleInitializer Android - PullRequest
0 голосов
/ 29 апреля 2018

Так как я обновил свою андроид студию и 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.DynamiteModuleInitializer" по пути: 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: не удалось загрузить код для модуля FileApk (/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 / DynamiteLoaderV2: Не удалось создать контекст модуля. 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);
}

}

Если вам нужна дополнительная информация, вы можете спросить. И да, моя аутентификация firebase включена, а также база данных хранения и реального времени

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Я сталкиваюсь с той же проблемой на моем устройстве Huawei (P9 Lite с Android 7.0), я решил эту проблему с помощью Очистить кэш в Настройки -> Приложения -> Google Play Услуги -> Хранение

Надеюсь, это поможет вам. Ура! ..

0 голосов
/ 20 мая 2018

У меня была такая же проблема на моем Honor STF-L09. Я решил проблему, обновив службы Google Play до бета-версии, так как существуют известные проблемы с текущей версией на устройствах huawei и honor.

См. Ниже инструкции: https://www.androidauthority.com/google-play-services-huawei-honor-866884/

Это дает немного больше понимания, но в основном содержит ссылку для регистрации в бета-версии сервисов Google Play:

https://play.google.com/apps/testing/com.google.android.gms

0 голосов
/ 15 мая 2018

У меня была такая же проблема на моем устройстве Huawei (P9 Lite с android 7.0), чтобы решить эту проблему, просто удалите установленную на данный момент версию Служб Google Play, восстановив ее по умолчанию, которая поставляется с нашим устройством (это может быть сделано через приложение настроек). Затем перезагрузите устройство и обновите приложение Google Play Services до последней версии. Затем запустите ваше приложение, и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...