java.lang.NoClassDefFoundError: rx.subjects.PublishSubject

Я добавил Adobe Creative SDK в свой проект, и теперь я получаю сообщение об ошибке, когда пытаюсь перейти к функции редактирования изображения.

FATAL EXCEPTION: main
                java.lang.NoClassDefFoundError: rx.subjects.PublishSubject
                at com.adobe.creativesdk.aviary.internal.account.AdobeAccountConnection.<init>(AdobeAccountConnection.java:45)
                at com.adobe.creativesdk.aviary.AdobeImageEditorActivity.onCreate(AdobeImageEditorActivity.java:517)
                at android.app.Activity.performCreate(Activity.java:5268)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2264)
                at android.app.ActivityThread.access$600(ActivityThread.java:144)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1259)
                at android.os.Handler.dispatchMessage(Handler.java:99)
                at android.os.Looper.loop(Looper.java:137)
                at android.app.ActivityThread.main(ActivityThread.java:5136)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:525)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:740)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
                at dalvik.system.NativeStart.main(Native Method)

Я просмотрел документацию, но понятия не имею, почему я получаю эту ошибку.

я прикрепил свой код

    package com.sliit.dailyselfie.Camera;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.IdRes;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.adobe.creativesdk.aviary.AdobeImageIntent;
import com.bumptech.glide.Glide;
import com.roughike.bottombar.BottomBar;
import com.roughike.bottombar.OnMenuTabClickListener;
import com.sliit.dailyselfie.R;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import rebus.bottomdialog.BottomDialog;


public class CameraActivity extends AppCompatActivity {

    private static final int ActivityStartCAM=0;
    private final static int EDIT_IMAGE=1;
    private ImageView IV;
    private String ImageFileLoaction="";

    BottomBar CamBottomBar;
    ImageButton bcan,bsnap,bdesc;
    Dialog d;
    BottomDialog dialog;
    String challenge;
    Bundle extras;
    boolean picpresent=false;

    Uri ImageUri;






    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        IV = (ImageView)findViewById(R.id.snap1);

        IV.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {


                if (picpresent) {
                    dialog = new BottomDialog(CameraActivity.this);
                    dialog.title("Options");
                    dialog.canceledOnTouchOutside(true);
                    dialog.cancelable(true);
                    dialog.inflateMenu(R.menu.camera_bottomsheet_menu);
                    dialog.setOnItemSelectedListener(new BottomDialog.OnItemSelectedListener() {
                        @Override
                        public boolean onItemSelected(int id) {
                            switch (id) {
                                case R.id.addeffects:
                                    image();
                                    return true;

                                case R.id.crop:
                                    Toast.makeText(getApplicationContext(),"crop",Toast.LENGTH_SHORT).show();
                                    return true;

                                default:
                                    return false;
                            }
                        }
                    });
                    dialog.show();
                }
                return true;
            }
        });


         extras = getIntent().getExtras();
        if (extras != null) {
            challenge = extras.getString("Challenge");
        }


        CamBottomBar = BottomBar.attach(this, savedInstanceState);
        CamBottomBar.noNavBarGoodness();



        CamBottomBar.setItemsFromMenu(R.menu.camera_bottombar, new OnMenuTabClickListener() {
            @Override
            public void onMenuTabSelected(@IdRes int menuItemId) {

                if (menuItemId == R.id.nav_back) {

                    IV.setImageResource(R.drawable.selfieimage);
                    IV.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                    picpresent = false;

                } else if (menuItemId == R.id.nav_takeSnap) {
                    Intent CAMint= new Intent();
                    CAMint.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                    File photoFile=null;
                    try{
                        photoFile=createImageFile();
                    }catch(IOException e){
                        e.printStackTrace();
                    }

                    CAMint.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                    startActivityForResult(CAMint, ActivityStartCAM);


                } else if (menuItemId == R.id.nav_addDetails) {
                    if (picpresent) {

                        switch (challenge) {

                            case "fitness":
                                d = new Dialog(CameraActivity.this);
                                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                d.setContentView(R.layout.fitnessdialog);
                                ImageView fitim = (ImageView) d.findViewById(R.id.fitdialogimg);
                                TextView fittxt = (TextView) d.findViewById(R.id.fitdialogdesc);
                                d.show();
                                break;

                            case "maternity":
                                d = new Dialog(CameraActivity.this);
                                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                d.setContentView(R.layout.maternitydialog);
                                ImageView matimg = (ImageView) d.findViewById(R.id.matdialogimg);
                                TextView mattxt = (TextView) d.findViewById(R.id.matdialogdesc);
                                d.show();

                                break;

                            case "child":
                                d = new Dialog(CameraActivity.this);
                                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                d.setContentView(R.layout.childdialog);
                                ImageView chilimg = (ImageView) d.findViewById(R.id.childialogimg);
                                TextView chiltxt = (TextView) d.findViewById(R.id.childialogdesc);
                                d.show();

                                break;

                        }


                    }else{
                        Toast.makeText(CameraActivity.this, "Please select image", Toast.LENGTH_SHORT).show();
                    }

                }
//
//                CamBottomBar.mapColorForTab(0, ContextCompat.getColor(CameraActivity.this, R.color.bottomPrimary));
//                CamBottomBar.mapColorForTab(1, ContextCompat.getColor(CameraActivity.this, R.color.bottomPrimary));
//                CamBottomBar.mapColorForTab(2, ContextCompat.getColor(CameraActivity.this, R.color.bottomPrimary));


            }

            @Override
            public void onMenuTabReSelected(@IdRes int menuItemId) {


                if (menuItemId == R.id.nav_back) {

                    IV.setImageResource(R.drawable.selfieimage);
                    IV.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                    picpresent = false;


                } else if (menuItemId == R.id.nav_takeSnap) {
                    Intent CAMint = new Intent();
                    CAMint.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                    File photoFile = null;
                    try {
                        photoFile = createImageFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    CAMint.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                    startActivityForResult(CAMint, ActivityStartCAM);


                } else if (menuItemId == R.id.nav_addDetails) {

                    if (picpresent) {

                        switch (challenge) {

                            case "fitness":
                                d = new Dialog(CameraActivity.this);
                                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                d.setContentView(R.layout.fitnessdialog);
                                ImageView fitim = (ImageView) d.findViewById(R.id.fitdialogimg);
                                TextView fittxt = (TextView) d.findViewById(R.id.fitdialogdesc);
                                d.show();
                                break;

                            case "maternity":
                                d = new Dialog(CameraActivity.this);
                                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                d.setContentView(R.layout.maternitydialog);
                                ImageView matimg = (ImageView) d.findViewById(R.id.matdialogimg);
                                TextView mattxt = (TextView) d.findViewById(R.id.matdialogdesc);
                                d.show();

                                break;

                            case "child":
                                d = new Dialog(CameraActivity.this);
                                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                d.setContentView(R.layout.childdialog);
                                ImageView chilimg = (ImageView) d.findViewById(R.id.childialogimg);
                                TextView chiltxt = (TextView) d.findViewById(R.id.childialogdesc);
                                d.show();

                                break;

                        }


                    }else{
                        Toast.makeText(CameraActivity.this, "Please select image", Toast.LENGTH_SHORT).show();
                    }

                }

//
//                CamBottomBar.mapColorForTab(0, ContextCompat.getColor(CameraActivity.this, R.color.bottomPrimary));
//                CamBottomBar.mapColorForTab(1, ContextCompat.getColor(CameraActivity.this, R.color.bottomPrimary));
//                CamBottomBar.mapColorForTab(2, ContextCompat.getColor(CameraActivity.this, R.color.bottomPrimary));


            }
        });



    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        rotateImage(setReducedImageSize());
        IV.setScaleType(ImageView.ScaleType.CENTER_CROP);
        if(!picpresent){
            IV.setImageResource(R.drawable.selfieimage);
            IV.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        }
    }

    public void TakePhoto(View v){
        Intent CAMint= new Intent();
        CAMint.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        File photoFile=null;
        try{
            photoFile=createImageFile();
        }catch(IOException e){
            e.printStackTrace();
        }

        CAMint.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
        startActivityForResult(CAMint, ActivityStartCAM);

    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode==ActivityStartCAM  && resultCode==RESULT_OK){
            rotateImage(setReducedImageSize());
           ImageUri = Uri.parse(ImageFileLoaction);
            IV.setScaleType(ImageView.ScaleType.CENTER_CROP);
            picpresent=true;

        }
        if (resultCode == RESULT_OK && requestCode==EDIT_IMAGE) {


                /* Make a case for the request code we passed to startActivityForResult() */

                    /* Show the image! */
            Uri editedImageUri = data.getData();
            ImageUri=data.getData();
           Glide.with(this).load(editedImageUri).into(IV);
            picpresent=true;



        }

    }

    File createImageFile()throws IOException{
        String timestamp= new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFieldname="IMAGE "+timestamp+"_";
        File storageDeirectory= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File image=File.createTempFile(imageFieldname,".jpg",storageDeirectory);
        ImageFileLoaction=image.getAbsolutePath();
        return image;
    }

    private Bitmap  setReducedImageSize(){
        int taretimagevieweidth=IV.getWidth();
        int targetimageviewheight=IV.getHeight();
        BitmapFactory.Options bmfop= new BitmapFactory.Options();
        bmfop.inJustDecodeBounds=true;
        BitmapFactory.decodeFile(ImageFileLoaction,bmfop);
        int Cameraheight=bmfop.outHeight;
        int Camerawidth=bmfop.outWidth;
        int scalefactor =Math.min(Camerawidth/taretimagevieweidth,Cameraheight/targetimageviewheight);
        bmfop.inSampleSize=scalefactor;
        bmfop.inJustDecodeBounds=false;
        return  BitmapFactory.decodeFile(ImageFileLoaction,bmfop);
    }

    private void rotateImage(Bitmap bitmap){
        ExifInterface exifInterface = null;
        try{
            exifInterface = new ExifInterface(ImageFileLoaction);
        }catch(Exception e){
            e.printStackTrace();
        }
        int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_UNDEFINED);
        Matrix matrix = new Matrix();
        switch (orientation){
            case ExifInterface.ORIENTATION_ROTATE_90:
                matrix.setRotate(90);
                break;
            case ExifInterface.ORIENTATION_ROTATE_180:
                matrix.postRotate(180);
                break;
            default:

        }
        Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
        IV.setImageBitmap(rotatedBitmap);
    }


    public void image(){
      /* 1) Make a new Uri object (Replace this with a real image on your device) */
        Uri imageUri = ImageUri;

        /* 2) Create a new Intent */
        Intent imageEditorIntent = new AdobeImageIntent.Builder(this)
                .setData(imageUri)
                .build();

        /* 3) Start the Image Editor with request code 1 */
        startActivityForResult(imageEditorIntent,EDIT_IMAGE);

    }

}

person TRomesh    schedule 25.04.2016    source источник
comment
попробуйте эти зависимости Gradle, зависимости {скомпилировать 'com.netflix.rxjava:rxjava-android:0.20.7'}   -  person Muhammad Waleed    schedule 25.04.2016


Ответы (3)


Это связано с тем, что вы используете версию Android 4.x, а MultiDex реализован неправильно. Я решил эту проблему, выполнив следующие шаги:

  1. Добавьте следующие строки в module.gradle.

    defaultConfig { multiDexEnabled true }
    compile 'com.android.support:multidex:1.0.1'

  2. Расширение приложения класса из MultiDexApplication

Пример:

public class Globalapplication extends MultiDexApplication implements IAviaryClientCredentials {...}
  1. переопределить attachBaseContext в предыдущем классе

Пример:

@Override
protected void attachBaseContext(Context base) {
    MultiDex.install(this);
    super.attachBaseContext(base);
}

для получения дополнительной информации читайте: NoClassDefFoundError с Android Studio на Android 4 https://developer.android.com/studio/build/multidex.html

person Alejandro Uribe Sanchez    schedule 16.06.2016

Согласно документации Oracle,
вызывается, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения ) и не удалось найти определение класса. Искомое определение класса существовало, когда выполняющийся в данный момент класс был скомпилирован, но определение больше не может быть найдено.

Итак, определение rx.subjects.PublishSubject не найдено...

person Saurabh Vardani    schedule 25.04.2016
comment
Вы должны опубликовать свой код для лучшего понимания - person Saurabh Vardani; 25.04.2016
comment
Я прикрепил код, ниже есть функция, называемая image(), где я вызываю действие редактирования - person TRomesh; 25.04.2016
comment
@Tharaka.. Созданная ошибка связана с используемой вами библиотекой ... просто убедитесь, что вы подключили все необходимые библиотеки вместе с вашим проектом, обеспечив их совместимый уровень API ..... - person Saurabh Vardani; 25.04.2016
comment
@Tharaka попробуйте эти зависимости Gradle, зависимости {скомпилировать 'com.netflix.rxjava:rxjava-android:0.20.7'} - person Muhammad Waleed; 25.04.2016

посмотрите на пакеты, кажется, вы не можете получить доступ к пакету rx.subjects.PublishSubject или он отсутствует. убедитесь, что вы импортируете rx.subjects.*;

person Linuxuser07    schedule 25.04.2016
comment
попробуйте эти зависимости Gradle, зависимости {скомпилировать 'com.netflix.rxjava:rxjava-android:0.20.7'} - person Muhammad Waleed; 25.04.2016
comment
@ExceptionLover теперь я получаю сообщение об ошибке, подобное этому Ошибка: Не удалось выполнить задачу ': приложение: TransformClassesWithJarMergingForDebug'. › com.android.build.api.transform.TransformException: java.util.zip.ZipException: повторяющаяся запись: rx/Observable$6.class - person TRomesh; 25.04.2016
comment
я имел ввиду импорт rx.subjects.*; - person Linuxuser07; 04.05.2016