
我希望你能帮助我解决我面临的问题.我正在尝试使用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的ClassNotFoundException全部内容,希望文章能够帮你解决java – 使用Parse和Facebook的ClassNotFoundException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)