i trying implement login facebook on android app. using following tutorial http://code.tutsplus.com/tutorials/quick-tip-add-facebook-login-to-your-android-app--cms-23837. have no errors in code when try access activity login facebook button located run time error. cannot load activity.
logcat
04-06 14:57:05.024 8470-8470/com.example.martin.ivebeenthere e/androidruntime: fatal exception: main java.lang.exceptionininitializererror @ java.lang.reflect.constructor.constructnative(native method) @ java.lang.reflect.constructor.newinstance(constructor.java:417) @ android.view.layoutinflater.createview(layoutinflater.java:587) @ android.view.layoutinflater.createviewfromtag(layoutinflater.java:687) @ android.view.layoutinflater.rinflate(layoutinflater.java:746) @ android.view.layoutinflater.parseinclude(layoutinflater.java:830) @ android.view.layoutinflater.rinflate(layoutinflater.java:736) @ android.view.layoutinflater.inflate(layoutinflater.java:489) @ android.view.layoutinflater.inflate(layoutinflater.java:396) @ android.view.layoutinflater.inflate(layoutinflater.java:352) @ android.support.v7.app.appcompatdelegateimplv7.setcontentview(appcompatdelegateimplv7.java:256) @ android.support.v7.app.appcompatactivity.setcontentview(appcompatactivity.java:109) @ com.example.martin.ivebeenthere.login.oncreate(login.java:34) @ android.app.activity.performcreate(activity.java:5047) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1094) @ android.app.activitythread.performlaunchactivity(activitythread.java:2056) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2117) @ android.app.activitythread.access$700(activitythread.java:134) @ android.app.activitythread$h.handlemessage(activitythread.java:1218) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:4867) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1007) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:774) @ dalvik.system.nativestart.main(native method) caused by: null @ com.facebook.internal.validate.sdkinitialized(validate.java:99) @ com.facebook.facebooksdk.getcallbackrequestcodeoffset(facebooksdk.java:735) @ com.facebook.internal.callbackmanagerimpl$requestcodeoffset.torequestcode(callbackmanagerimpl.java:109) @ com.facebook.login.widget.loginbutton.<clinit>(loginbutton.java:58) @ java.lang.reflect.constructor.constructnative(native method) @ java.lang.reflect.constructor.newinstance(constructor.java:417) @ android.view.layoutinflater.createview(layoutinflater.java:587) @ android.view.layoutinflater.createviewfromtag(layoutinflater.java:687) @ android.view.layoutinflater.rinflate(layoutinflater.java:746) @ android.view.layoutinflater.parseinclude(layoutinflater.java:830) @ android.view.layoutinflater.rinflate(layoutinflater.java:736) @ android.view.layoutinflater.inflate(layoutinflater.java:489) @ android.view.layoutinflater.inflate(layoutinflater.java:396) @ android.view.layoutinflater.inflate(layoutinflater.java:352) @ android.support.v7.app.appcompatdelegateimplv7.setcontentview(appcompatdelegateimplv7.java:256) @ android.support.v7.app.appcompatactivity.setcontentview(appcompatactivity.java:109) @ com.example.martin.ivebeenthere.login.oncreate(login.java:34) @ android.app.activity.performcreate(activity.java:5047) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1094) @ android.app.activitythread.performlaunchactivity(activitythread.java:2056) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2117) @ android.app.activitythread.access$700(activitythread.java:134) @ android.app.activitythread$h.handlemessage(activitythread.java:1218) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:4867) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1007) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:774) @ dalvik.system.nativestart.main(native method)
login.java
package com.example.martin.ivebeenthere; import android.content.intent; import android.os.bundle; import android.support.design.widget.floatingactionbutton; import android.support.design.widget.snackbar; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.view.view; import android.widget.textview; import com.facebook.callbackmanager; import com.facebook.facebookcallback; import com.facebook.facebookexception; import com.facebook.facebooksdk; import com.facebook.login.loginresult; import com.facebook.login.widget.loginbutton; import com.microsoft.windowsazure.mobileservices.mobileserviceclient; import com.microsoft.windowsazure.mobileservices.http.servicefilterresponse; import com.microsoft.windowsazure.mobileservices.table.tableoperationcallback; import java.net.malformedurlexception; public class login extends appcompatactivity { private textview info; private loginbutton loginbutton; private callbackmanager callbackmanager; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_login); toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); facebooksdk.sdkinitialize(getapplicationcontext()); callbackmanager = callbackmanager.factory.create(); setcontentview(r.layout.activity_login); info = (textview)findviewbyid(r.id.info); loginbutton = (loginbutton)findviewbyid(r.id.login_button); loginbutton.registercallback(callbackmanager, new facebookcallback<loginresult>() { @override public void onsuccess(loginresult loginresult) { info.settext( "user id: " + loginresult.getaccesstoken().getuserid() + "\n" + "auth token: " + loginresult.getaccesstoken().gettoken() ); } @override public void oncancel() { info.settext("login attempt canceled."); } @override public void onerror(facebookexception e) { info.settext("login attempt failed."); } }); } public void onclickbtnfeed(view view) { startactivity(new intent(login.this, feed.class)); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { callbackmanager.onactivityresult(requestcode, resultcode, data); } }
androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.martin.ivebeenthere"> <!-- access_coarse/fine_location permissions not required use google maps android api v2, must specify either coarse or fine location permissions 'mylocation' functionality. --> <uses-permission android:name="android.permission.access_fine_location" /> <uses-permission android:name="android.permission.internet" /> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/apptheme"> <activity android:name=".home" android:label="@string/app_name" android:theme="@style/apptheme.noactionbar"> <intent-filter> <action android:name="com.example.splash.clearscreen" /> <category android:name="android.intent.category.default" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".login" android:label="@string/title_activity_login" android:theme="@style/apptheme.noactionbar" /> <activity android:name=".register" android:label="@string/title_activity_register" android:theme="@style/apptheme.noactionbar" /> <!-- api key google maps-based apis defined string resource. (see file "res/values/google_maps_api.xml"). note api key linked encryption key used sign apk. need different api key each encryption key, including release key used sign apk publishing. can define keys debug , release targets in src/debug/ , src/release/. --> <meta-data android:name="com.google.android.geo.api_key" android:value="@string/google_maps_key" /> <meta-data android:name="com.facebook.sdk.applicationid" android:value="@string/facebook_app_id"/> <activity android:name="com.facebook.facebookactivity" android:configchanges= "keyboard|keyboardhidden|screenlayout|screensize|orientation" android:theme="@android:style/theme.translucent.notitlebar" android:label="@string/app_name" /> <activity android:name=".map" android:label="@string/title_activity_map" /> <activity android:name=".splash"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".feed" android:label="@string/title_activity_feed" android:theme="@style/apptheme.noactionbar" /> <activity android:name=".checkininfo" android:label="@string/title_activity_checkin_info" android:theme="@style/apptheme.noactionbar" /> <activity android:name=".account" android:label="@string/title_activity_account" android:theme="@style/apptheme.noactionbar" /> <activity android:name=".editaccount" android:label="@string/title_activity_edit_account" android:theme="@style/apptheme.noactionbar" /> <activity android:name=".checkin" android:label="@string/title_activity_checkin" android:theme="@style/apptheme.noactionbar" /> </application> </manifest>
activity_login.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.coordinatorlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitssystemwindows="true" tools:context="com.example.martin.ivebeenthere.login"> <android.support.design.widget.appbarlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/apptheme.appbaroverlay"> <android.support.v7.widget.toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionbarsize" android:background="?attr/colorprimary" app:popuptheme="@style/apptheme.popupoverlay" /> </android.support.design.widget.appbarlayout> <include layout="@layout/content_login" /> </android.support.design.widget.coordinatorlayout>
content_login.xml
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.martin.ivebeenthere.login" tools:showin="@layout/activity_login"> <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageview" android:src="@drawable/logo" android:layout_alignparentbottom="true" android:layout_alignparentleft="true" android:layout_alignparentstart="true" android:layout_marginbottom="276dp" /> <edittext android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputtype="textpersonname" android:ems="10" android:hint="username" android:id="@+id/edittext" android:layout_centervertical="true" android:layout_centerhorizontal="true" /> <edittext android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputtype="textpassword" android:ems="10" android:hint="password" android:id="@+id/edittext2" android:layout_below="@+id/edittext" android:layout_centerhorizontal="true" /> <button android:layout_width="200dp" android:layout_height="wrap_content" android:text="login" android:id="@+id/button3" android:layout_below="@+id/edittext2" android:layout_centerhorizontal="true" android:onclick="onclickbtnfeed"/> <!--<button android:layout_width="200dp" android:layout_height="wrap_content" android:text="login facebook" android:id="@+id/button4" android:background="#3b5998" android:textcolor="#ffffff" android:layout_below="@+id/button3" android:layout_alignleft="@+id/button3" android:layout_alignstart="@+id/button3" android:layout_margintop="25dp" />--> <com.facebook.login.widget.loginbutton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerinparent="true" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/info" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:textsize="18sp" /> </relativelayout>
update below code.
activity_login.xml
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:facebook="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.facebook.widget.loginbutton android:id="@+id/fb_login_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="5dp" facebook:confirm_logout="false" facebook:fetch_user_info="true" /> <textview android:id="@+id/username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" android:textsize="16sp" /> </linearlayout>
login.java
import java.util.arrays; import android.content.intent; import android.os.bundle; import android.support.v4.app.fragmentactivity; import android.util.log; import android.widget.textview; import com.facebook.session; import com.facebook.sessionstate; import com.facebook.uilifecyclehelper; import com.facebook.model.graphuser; import com.facebook.widget.loginbutton; import com.facebook.widget.loginbutton.userinfochangedcallback; public class login extends fragmentactivity { private loginbutton loginbtn; private textview username; private uilifecyclehelper uihelper; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); uihelper = new uilifecyclehelper(this, statuscallback); uihelper.oncreate(savedinstancestate); setcontentview(r.layout.activity_login); username = (textview) findviewbyid(r.id.username); loginbtn = (loginbutton) findviewbyid(r.id.fb_login_button); loginbtn.setreadpermissions(arrays.aslist("email")); loginbtn.setuserinfochangedcallback(new userinfochangedcallback() { @override public void onuserinfofetched(graphuser user) { if (user != null) { username.settext("you logged in " + user.getname()); } else { username.settext("you not logged in."); } } }); } private session.statuscallback statuscallback = new session.statuscallback() { @override public void call(session session, sessionstate state, exception exception) { if (state.isopened()) { log.d("login", "facebook session opened."); } else if (state.isclosed()) { log.d("login", "facebook session closed."); } } }; @override public void onresume() { super.onresume(); uihelper.onresume(); } @override public void onpause() { super.onpause(); uihelper.onpause(); } @override public void ondestroy() { super.ondestroy(); uihelper.ondestroy(); } @override public void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); uihelper.onactivityresult(requestcode, resultcode, data); } @override public void onsaveinstancestate(bundle savedstate) { super.onsaveinstancestate(savedstate); uihelper.onsaveinstancestate(savedstate); } }
androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.martin.ivebeenthere" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="19" /> <uses-permission android:name="android.permission.internet"/> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name=".login" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name="com.facebook.loginactivity" android:theme="@android:style/theme.translucent.notitlebar" /> <meta-data android:name="com.facebook.sdk.applicationid" android:value="@string/app_id" /> </application> </manifest>
Comments
Post a Comment