1

I have 2 projects 1 st one ismain project and 2 nd one library project.Library project have custom alert dialog with layout xml file.but when in import my library to main project and call custom alert it gives java.lang.ClassNotFoundException:

Main Project alert dialog call

public class MainFragment extends Fragment {

private TextView textView;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
private ProfileTracker profileTracker;

private ServiceCall serviceCall;
private SendFbData sendFbData;

Activity activity;
String facebook_id = "";
String email =  "";
String first_name = "";
String last_name = "";
String location = "";
String os = "";


private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        AccessToken accessToken = loginResult.getAccessToken();
        Profile profile = Profile.getCurrentProfile();

        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(
                            JSONObject object,
                            GraphResponse response) {
                        // Application code
                        Log.v("LoginActivity", response.toString());

                        try {
                           sendFbData.getUserPermission(getActivity());

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,last_name,first_name,email,gender,location,hometown");
        request.setParameters(parameters);
        request.executeAsync();



       // displayWelcomeMessage(profile);
   }

    @Override
    public void onCancel() {

    }

    @Override
    public void onError(FacebookException e) {

    }
};

public MainFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getActivity());


    callbackManager = CallbackManager.Factory.create();
    AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken old, AccessToken newTocken) {

        }
    };

    ProfileTracker profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(Profile old, Profile newProfile) {

        }
    };
    accessTokenTracker.startTracking();
    profileTracker.startTracking();

}


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

    serviceCall = new ServiceCall();
    sendFbData = new SendFbData();

    textView = (TextView) view.findViewById(R.id.text);
    LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setFragment(this);
    loginButton.setReadPermissions("user_friends");
    loginButton.setReadPermissions("public_profile");
    loginButton.setReadPermissions("email");
    loginButton.registerCallback(callbackManager, mCallback);

    return view;
}



@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

}

@Override
public void onResume() {
    super.onResume();
    Profile profile = Profile.getCurrentProfile();
    displayWelcomeMessage(profile);
}

@Override
public void onStop() {
    super.onStop();
    accessTokenTracker.stopTracking();
    profileTracker.stopTracking();
}

private void displayWelcomeMessage(Profile profile){

    if(profile != null){
        textView.setText("Welcome " + profile.getName());

    }

}

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

    callbackManager.onActivityResult(requestCode, resultCode, data);

}
}

Library Project - custom_alert_dialog.xml

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:orientation="horizontal"
    android:weightSum="1">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:orientation="horizontal">


        <Button
            android:background="@null"
            android:id="@+id/btn_no"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_weight="1"

            />

        <Button
            android:background="@null"
            android:id="@+id/btn_yes"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_weight="1"


            />
    </LinearLayout>
</LinearLayout>

  • SendFbData.class

     public class SendFbData extends ActionBarActivity {
    
     public SendFbData(){
    
     }
    
     @Override
     public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_get_user_info);
    
     }
    
     public void getUserPermission(final Activity activity, final    ServiceCall serviceCall){
    
     final Dialog dialog = new Dialog(activity);
    dialog.setContentView(R.layout.custom_alert_dialog);
    
    Button btn_no = (Button) dialog.findViewById(R.id.btn_no);
    Button btn_yes = (Button) dialog.findViewById(R.id.btn_yes);
    
    btn_no.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });
    
    btn_yes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new ServiceCall(activity, serviceCall).execute();
        }
    });
    
    dialog.show();
    }
    }
    

Log cat

Process: android.wake.testfbloginwithlibrary, PID: 7253
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/wake/androidlib/R$layout;
        at com.wake.androidlib.SendFbData.getUserPermission(SendFbData.java:65)
        at android.wake.testfbloginwithlibrary.MainFragment$1$1.onCompleted(MainFragment.java:90)
        at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:304)
        at com.facebook.GraphRequest$5.run(GraphRequest.java:1368)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.wake.androidlib.R$layout" on path: DexPathList[[zip file "/data/app/android.wake.testfbloginwithlibrary-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at com.wake.androidlib.SendFbData.getUserPermission(SendFbData.java:65)
            at android.wake.testfbloginwithlibrary.MainFragment$1$1.onCompleted(MainFragment.java:90)
            at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:304)
            at com.facebook.GraphRequest$5.run(GraphRequest.java:1368)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Suppressed: java.lang.ClassNotFoundException: com.wake.androidlib.R$layout
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 13 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {

        minSdkVersion 9
        targetSdkVersion 22

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
}

//task to delete the old jar
task deleteOldJar(type: Delete){
    delete 'release/WKNS.jar'
}

//task to export contents as jar
task exportJar(type: Copy){
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    //rename the jar
    rename('classes.jar', 'WKNS.jar')
}

exportJar.dependsOn(deleteOldJar, build)
8
  • did you added library dependence on build.gradle Commented Oct 2, 2015 at 6:13
  • yes.this cod work fine with android AlertDialog.but when i use custom dialog it didnt work. Commented Oct 2, 2015 at 6:14
  • For custom AlertDialog you are using library right? Commented Oct 2, 2015 at 6:16
  • 1
    .aar will contain .jar and resources as well. Are you referencing only jar ? Commented Oct 2, 2015 at 6:21
  • 1
    it may be helpful if you put import statements and main project build.gradle Commented Oct 2, 2015 at 6:47

1 Answer 1

1

Try below steps because it worked for me.

Step 1: Right Click on your project and select build Path and choose configure build path.

Step 2: select android and remove imported Library Project. and apply.

Restart your IDE and try to import it again. It worked for me. Hope it work for you too.. Thank you

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.