java– 使用Parse和Facebook的Cla​​ssNotFoundException

java– 使用Parse和Facebook的Cla​​ssNotFoundException,第1张

概述我希望你能帮助我解决我面临的问题.我正在尝试使用Parse将Facebook登录集成到我的应用程序中,当我调用该方法时,我收到ClassNotFoundException错误ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginActivity.this,permissions,newLogInCallback()错误堆栈跟

我希望你能帮助我解决我面临的问题.我正在尝试使用Parse将Facebook登录集成到我的应用程序中,当我调用该方法时,我收到ClassNotFoundException错误

 ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginActivity.this, permissions, new LogInCallback()

错误堆栈跟踪:

05-15 10:36:00.749    3936-3936/kstr14.tipper E/AndroIDRuntime﹕ FATAL EXCEPTION: mainProcess: kstr14.tipper, PID: 3936java.lang.IllegalStateException: Could not execute method of the activity        at androID.vIEw.VIEw.onClick(VIEw.java:4007)        at androID.vIEw.VIEw.performClick(VIEw.java:4756)        at androID.vIEw.VIEw$PerformClick.run(VIEw.java:19749)        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:5221)        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:899)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.reflect.InvocationTargetException        at java.lang.reflect.Method.invoke(Native Method)        at java.lang.reflect.Method.invoke(Method.java:372)        at androID.vIEw.VIEw.onClick(VIEw.java:4002)        at androID.vIEw.VIEw.performClick(VIEw.java:4756)        at androID.vIEw.VIEw$PerformClick.run(VIEw.java:19749)        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:5221)        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:899)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/parse/ParseTaskUtils;        at com.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:173)        at kstr14.tipper.ActivitIEs.LoginActivity.facebookLoginpressed(LoginActivity.java:170)        at java.lang.reflect.Method.invoke(Native Method)        at java.lang.reflect.Method.invoke(Method.java:372)        at androID.vIEw.VIEw.onClick(VIEw.java:4002)        at androID.vIEw.VIEw.performClick(VIEw.java:4756)        at androID.vIEw.VIEw$PerformClick.run(VIEw.java:19749)        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:5221)        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:899)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.classNotFoundException: DIDn't find class "com.parse.ParseTaskUtils" on path: DexPathList[[zip file "/data/app/kstr14.tipper-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.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:173)        at kstr14.tipper.ActivitIEs.LoginActivity.facebookLoginpressed(LoginActivity.java:170)        at java.lang.reflect.Method.invoke(Native Method)        at java.lang.reflect.Method.invoke(Method.java:372)        at androID.vIEw.VIEw.onClick(VIEw.java:4002)        at androID.vIEw.VIEw.performClick(VIEw.java:4756)        at androID.vIEw.VIEw$PerformClick.run(VIEw.java:19749)        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:5221)        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:899)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:694)Suppressed: java.lang.classNotFoundException: com.parse.ParseTaskUtils        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)        ... 16 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

我的lib文件夹中有以下jar文件:
解析-1.9.1.jar
javax.mail.jar
螺栓,AndroID的1.2.0.jar
ParseFacebookUtilsV4-1.9.2.jar

我已经尝试了build.gradle文件的依赖项部分的各种各样的东西,因为我怀疑这个错误是由于某些库没有正确包含,但我尝试过的都没有.我已经尝试了不同的方法来指定编译jar文件以及以不同的顺序指定jar.
目前我的build.gradle文件如下所示:

apply plugin: 'com.androID.application'androID {    compileSdkVersion 21    buildToolsversion "21.1.2"    defaultConfig {        applicationID "kstr14.tipper"        minSdkVersion 21        targetSdkVersion 21        versionCode 1        versionname "1.0"    }    buildTypes {        deBUG {            deBUGgable true        }        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID.txt'),     'proguard-rules.pro'        }    }    productFlavors {    }}repositorIEs {    mavenCentral()}dependencIEs {    compile filetree(include: ['*.jar'] ,dir: 'libs')    compile files('libs/bolts-androID-1.2.0.jar')    compile 'com.parse.bolts:bolts-androID:1.2.0'    compile files('libs/Parse-1.9.1.jar')    compile files('libs/ParseFacebookUtilsV4-1.9.2.jar')    compile files('libs/javax.mail.jar')    compile 'com.androID.support:appcompat-v7:22.0.0'    compile 'com.facebook.androID:facebook-android-sdk:4.0.0'    compile 'com.Google.androID.gms:play-services:7.0.0'}

有人有什么建议吗?

哦,顺便说一句,当我的应用程序由于错误而崩溃时,我按OK,然后Facebook登录屏幕显示..所以我认为facebook jar正在被导入正常,问题在Parse罐子里面.但是,在我尝试集成Facebook之前,我一直在使用Pars jar,它运行得很好.我在导入Facebook jar的同时导入了螺栓罐,因为我读到了必要的地方,所以它可能是螺栓罐的问题?

编辑:为LoginActivity添加了代码:

package kstr14.tipper.ActivitIEs;import androID.content.Intent;import androID.os.Bundle;import androID.support.v4.app.FragmentManager;import androID.support.v4.app.FragmentTransaction;import androID.support.v7.app.ActionBaractivity;import androID.util.Log;import androID.vIEw.Menu;import androID.vIEw.MenuItem;import androID.vIEw.VIEw;import androID.vIEw.Window;import androID.Widget.EditText;import androID.Widget.Toast;import com.facebook.FacebookSdk;import com.parse.LogInCallback;import com.parse.ParseException;import com.parse.ParseFacebookUtils;import com.parse.ParSEObject;import com.parse.ParseUser;import com.parse.SignUpCallback;import java.util.ArrayList;import java.util.List;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import kstr14.tipper.Data.category;import kstr14.tipper.Data.Group;import kstr14.tipper.Data.Tip;import kstr14.tipper.R;public class LoginActivity extends ActionBaractivity {// UI elements for default login fragmentprivate EditText usernameDefaultLogin;private EditText passwordDefaultLogin;// UI elements for sign up fragmentprivate EditText usernameSignup;private EditText emailSignup;private EditText passwordSignup;private EditText reenterPasswordSignup;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    getwindow().requestFeature(Window.FEATURE_ACTION_bar);    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_login);    getSupportActionbar().hIDe();    // initalize facebook    FacebookSdk.sdkInitialize(getApplicationContext());    // Initialize Parse    ParSEObject.registerSubclass(Tip.class);    ParSEObject.registerSubclass(category.class);    ParSEObject.registerSubclass(Group.class);    ParSEObject.registerSubclass(ParseUser.class);    // check cache for current user - if found go directly to MainActivity    ParseUser currentUser = ParseUser.getCurrentUser();    if(currentUser != null) {        Intent intent = new Intent(getApplicationContext(), MainActivity.class);        startActivity(intent);    }    // otherwise set fragment to the default login screen    DefaultLoginFragment defaultLoginFragment = new DefaultLoginFragment();    getSupportFragmentManager().beginTransaction()            .add(R.ID.fragment_container, defaultLoginFragment).commit();}// required for making Facebook login work@OverrIDepublic voID onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    ParseFacebookUtils.onActivityResult(requestCode, resultCode, data);}/** * Method called when sign up button pressed on the default login fragment * Switches the default login fragment with a sign up fragment * @param vIEw */public voID defaultSignUppressed(VIEw vIEw) {    SignUpFragment signUpFragment = new SignUpFragment();    FragmentManager fragmentManager = getSupportFragmentManager();    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();    // Replace the default login fragment with the sign up fragment,    // and add the transaction to the back stack so the user can navigate back    fragmentTransaction.replace(R.ID.fragment_container, signUpFragment);    fragmentTransaction.addToBackStack(null);    fragmentTransaction.commit();}/** * Method called when login button pressed on the default login fragment * Attempts to log in the user, if successful goes to MainActivity * @param vIEw */public voID defaultLoginpressed(VIEw vIEw) {    // initialize UI elements for default login fragment    usernameDefaultLogin = (EditText) findVIEwByID(R.ID.usernameDefaultLoginFragment);    passwordDefaultLogin = (EditText) findVIEwByID(R.ID.passwordDefaultLoginFragment);    // fetch input and attempt login    String username = usernameDefaultLogin.getText().toString();    String password = passwordDefaultLogin.getText().toString();    ParseUser.logInInBackground(username, password, new LogInCallback() {        public voID done(ParseUser user, ParseException e) {             if (user != null) {                  Intent intent = new Intent(getApplicationContext(), MainActivity.class);                  startActivity(intent);             } else {                  Toast.makeText(getApplicationContext(), "Login Failed.", Toast.LENGTH_SHORT).show();             }        }    });}/** * Method called when sign up button pressed in sign up fragment * Attempts to register the user, if successful goes to MainActivity * @param vIEw */public voID signuppressed(VIEw vIEw) {    // UI elements for sign up fragment    usernameSignup = (EditText) findVIEwByID(R.ID.usernameSignupFragment);    emailSignup = (EditText) findVIEwByID(R.ID.emailSignupFragment);    passwordSignup = (EditText) findVIEwByID(R.ID.passwordSignupFragment);    reenterPasswordSignup = (EditText) findVIEwByID(R.ID.reenterPasswordSignupFragment);    String username = usernameSignup.getText().toString();    String email = emailSignup.getText().toString();    String password1 = passwordSignup.getText().toString();    String password2 = reenterPasswordSignup.getText().toString();    // valIDate passwords and email    if(!valIDatePassword(password1, password2)) {        Toast.makeText(getApplicationContext(), "Passwords do not match, try again.", Toast.LENGTH_SHORT).show();    } else if (!valIDateEmail(email)) {        Toast.makeText(getApplicationContext(), "Please enter a valID email.", Toast.LENGTH_SHORT).show();    } else {        ParseUser user = new ParseUser();        user.setUsername(username);        user.setPassword(password1);        user.setEmail(email);        user.signUpInBackground(new SignUpCallback() {            public voID done(ParseException e) {                if (e == null) {                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);                    startActivity(intent);                } else {                    Toast.makeText(getApplicationContext(), "Sign up Failed. Please try again.", Toast.LENGTH_SHORT).show();                }            }        });    }}public voID facebookLoginpressed(VIEw vIEw) {    List<String> permissions = new ArrayList<String>();    permissions.add("public_profile");    ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginActivity.this, permissions, new LogInCallback() {        @OverrIDe        public voID done(ParseUser user, ParseException err) {            if (user == null) {                Log.d("MyApp", "Uh oh. The user cancelled the Facebook login.");            } else if (user.isNew()) {                Log.d("MyApp", "User signed up and logged in through Facebook!");            } else {                Log.d("MyApp", "User logged in through Facebook!");            }        }    });}/** * ValIDates that two passwords are equal * @param password1 * @param password2 * @return */public boolean valIDatePassword(String password1, String password2) {    if(password1.equals(password2)) return true;    else return false;    }/** * ValIDates the structure of an email address * @param email * @return */public boolean valIDateEmail(String email) {    boolean result = true;    try {        InternetAddress internetAddress = new InternetAddress(email);        internetAddress.valIDate();    } catch (AddressException e) {        e.printstacktrace();        result = false;    }    return result;}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) {    getMenuInflater().inflate(R.menu.menu_login, menu);    return true;}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) {    int ID = item.getItemID();    if (ID == R.ID.action_settings) {        return true;    }    return super.onoptionsItemSelected(item);}}

解决方法:

我实际上遇到了同样的问题.希望我可以为搜索此问题的任何人节省很多麻烦.答案是不使用较旧的SDK.实际上你需要做的就是确保你使用的是相同版本的Parse和ParseFacebookUtils.看看上面的gradle文件

compile 'com.parse.bolts:bolts-androID:1.2.0'compile files('libs/Parse-1.9.1.jar')compile files('libs/ParseFacebookUtilsV4-1.9.2.jar')

您使用的是Parse-1.9.1和ParseFacebookUtilsV4-1.9.2.我实际上犯了同样的错误.我从另一个项目中删除了Parse-1.9.1并再次下载了SDK以将FacebookUtils库拉出来.

总结

以上是内存溢出为你收集整理的java – 使用Parse和Facebook的Cla​​ssNotFoundException全部内容,希望文章能够帮你解决java – 使用Parse和Facebook的Cla​​ssNotFoundException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1107924.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存