Reputation: 5406
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)
Upvotes: 1
Views: 1265
Reputation: 77
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
Upvotes: 1