Facebook的Android SDK中的问题 [英] Facebook Android SDK problems
问题描述
我下面的教程我这个网站上找到的http://www.helloandroid.com/tutorials/using-facebook-sdk-android-development-part-2当我插入了2套code段在本教程指定的类,我得到4 SDK的Facebook相关的错误。我插至code段与错误波纹管加粗/出演。
没有人有任何想法,我应该如何解决这些错误?
下面是错误消息,我得到当我将鼠标放在错误,依次是:
1.onCreate(捆绑savedInstanceState):主要类型的方法的onCreate(捆绑)必须覆盖或实现超法
-
btnLogin.setOnClickListener(新OnClickListener():OnClickListener不能被解析为一个类型
-
LoginDialogListener:类型FBConnectionActivity.LoginDialogListener必须实现继承的抽象方法Facebook.DialogListener.onComplete(捆绑)
-
的onComplete(束值):类型FBConnectionActivity.LoginDialogListener的方法的onComplete(包)必须覆盖或实现超法
段1(2个错误):
在这部分的错误是在OnCreate中和onclicklistener
包com.outfit.first;进口android.widget.Button;
进口android.widget.ProgressBar;
进口android.widget.TextView;公共类主要扩展FBConnectionActivity {
私人TextView的txtUserName;
私人进度pbLogin;
私人按钮btnLogin;@覆盖
公共无效**的onCreate(捆绑savedInstanceState)** {
super.onCreate(savedInstanceState);
的setContentView(R.layout.main); txtUserName =(的TextView)findViewById(R.id.textFacebook);
pbLogin =(进度)findViewById(R.id.progressLogin);
btnLogin =(按钮)findViewById(R.id.buttonLogin);
btnLogin.setOnClickListener(新** ** OnClickListener(){
@覆盖
公共无效的onClick(查看为arg0){
pbLogin.setVisibility(ProgressBar.VISIBLE);
setConnection();
的getID(txtUserName,pbLogin);
}
});
}
}
2段(2个错误):在这部分的错误是在LoginDialogListener类和类中的onComplete(捆绑值)
包com.outfit.first;进口com.facebook.android.AsyncFacebookRunner;
进口com.facebook.android.Facebook;
进口android.app.Activity;
进口android.content.Context;
进口android.content.Shared preferences;
。进口的Android preference preferenceManager。
进口android.util.Log;
进口android.widget.ProgressBar;
进口android.widget.TextView;公共抽象类FBConnectionActivity延伸活动{
公共静态最后弦乐TAG =脸谱;
私人facebook mFacebook;
公共静态最后弦乐APP_ID =136907069717004;
私人AsyncFacebookRunner mAsyncRunner;
私有静态最后的String [] = PERMS新的String [] {read_stream};
私人共享preferences共享preFS;
私人语境mContext; 私人TextView的用户名;
私人进度PB; 公共无效setConnection(){
mContext =这一点;
mFacebook =新的Facebook(APP_ID);
mAsyncRunner =新AsyncFacebookRunner(mFacebook);
} 公共无效的getID(TextView的txtUserName,进度progbar){
用户名= txtUserName;
PB = progbar;
如果(isSession()){
Log.d(TAGsessionValid);
。mAsyncRunner ** **的要求(我,新IDRequestListener());
}其他{
//没有登录,所以重新登录
Log.d(TAG,sessionNOTValid,重新登录);
。mFacebook **授权**(在此,烫发,新LoginDialogListener());
}
} 公共布尔isSession(){
共享preFS = preferenceManager.getDefaultShared preferences(mContext);
串的access_token =共享prefs.getString(的access_token,×);
龙期满=共享prefs.getLong(access_expires,-1);
Log.d(TAG,的access_token); 如果(ACCESS_TOKEN = NULL&放大器;!&安培;!到期= -1){
mFacebook.setAccessToken(的access_token);
mFacebook.setAccessExpires(到期);
}
返回mFacebook.isSessionValid();
} 私有类** ** LoginDialogListener实现DialogListener { @覆盖
公共无效**的onComplete(束值)** {
Log.d(TAGLoginONComplete);
字符串标记= mFacebook.getAccessToken();
长token_expires = mFacebook.getAccessExpires();
Log.d(TAG的accessToken:+令牌);
Log.d(TAG,AccessExpires:+ token_expires);
共享preFS = preferenceManager
.getDefaultShared preferences(mContext);
共享prefs.edit()。putLong(access_expires,token_expires)
。承诺();
共享prefs.edit()putString(的access_token令牌).commit()。
mAsyncRunner.request(我,新IDRequestListener());
} @覆盖
公共无效onFacebookError(FacebookError E){
Log.d(TAGFacebookError:+ e.getMessage());
} @覆盖
公共无效onerror的(DialogError E){
Log.d(TAG,错误:+ e.getMessage());
} @覆盖
公共无效onCancel(){
Log.d(TAGOnCancel);
}
} 私有类IDRequestListener实现RequestListener { @覆盖
公共无效的onComplete(字符串响应,对象的状态){
尝试{
Log.d(TAGIDRequestONComplete);
Log.d(TAG,回应:+ response.toString());
JSONObject的JSON = Util.parseJson(响应); 最后弦乐ID = json.getString(ID);
最终的字符串名称= json.getString(名称);
FBConnectionActivity.this.runOnUiThread(新的Runnable(){
公共无效的run(){
username.setText(欢迎+姓名+\\ n ID:+身份证);
pb.setVisibility(ProgressBar.GONE); }
});
}赶上(JSONException E){
Log.d(TAGJSONException:+ e.getMessage());
}赶上(FacebookError E){
Log.d(TAGFacebookError:+ e.getMessage());
}
} @覆盖
公共无效onIOException(IOException异常即对象的状态){
Log.d(TAGIOException异常:+ e.getMessage());
} @覆盖
公共无效onFileNotFoundException(FileNotFoundException异常E,
对象的状态){
Log.d(TAGFileNotFoundException异常:+ e.getMessage());
} @覆盖
公共无效onMalformedURLException(MalformedURLException的E,
对象的状态){
Log.d(TAGMalformedURLException的:+ e.getMessage());
} @覆盖
公共无效onFacebookError(FacebookError即对象的状态){
Log.d(TAGFacebookError:+ e.getMessage());
} } @覆盖
保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
mFacebook.authorizeCallback(要求code,结果code,数据);
}
}
按Ctrl-Shift-O组合,一切都应该工作(它为我ATLEAST)
需要先进口活动:
进口android.app.Activity;
进口android.os.Bundle;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.ProgressBar;
进口android.widget.TextView;
和第二:
进口java.io.FileNotFoundException;
进口java.io.IOException异常;
进口java.net.MalformedURLException;进口org.json.JSONException;
进口org.json.JSONObject;进口android.app.Activity;
进口android.content.Context;
进口android.content.Intent;
进口android.content.Shared preferences;
进口android.os.Bundle;
。进口的Android preference preferenceManager。
进口android.util.Log;
进口android.widget.ProgressBar;
进口android.widget.TextView;进口com.facebook.android.AsyncFacebookRunner;
进口com.facebook.android.AsyncFacebookRunner.RequestListener;
进口com.facebook.android.DialogError;
进口com.facebook.android.Facebook;
进口com.facebook.android.Facebook.DialogListener;
进口com.facebook.android.FacebookError;
进口com.facebook.android.Util;
I'm following a tutorial I found on this website http://www.helloandroid.com/tutorials/using-facebook-sdk-android-development-part-2 and when I inserted the 2 sets of code segments in the classes the tutorial specifies I get 4 facebook sdk related errors. I inserted to the code segments bellow with the errors bold/starred.
Does anyone have any idea how I can fix these errors?
Here are the error messages i get when i mouse over the errors, in order:
1.onCreate(Bundle savedInstanceState) : The method onCreate(Bundle) of type main must override or implement a supertype method
btnLogin.setOnClickListener(new OnClickListener() : OnClickListener cannot be resolved to a type
LoginDialogListener : The type FBConnectionActivity.LoginDialogListener must implement the inherited abstract method Facebook.DialogListener.onComplete(Bundle)
onComplete(Bundle values) : The method onComplete(Bundle) of type FBConnectionActivity.LoginDialogListener must override or implement a supertype method
Segment 1 (2 errors) : In this part the errors are at the oncreate and the onclicklistener
package com.outfit.first;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class main extends FBConnectionActivity {
private TextView txtUserName;
private ProgressBar pbLogin;
private Button btnLogin;
@Override
public void **onCreate(Bundle savedInstanceState)** {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtUserName = (TextView) findViewById(R.id.textFacebook);
pbLogin = (ProgressBar) findViewById(R.id.progressLogin);
btnLogin = (Button) findViewById(R.id.buttonLogin);
btnLogin.setOnClickListener(new **OnClickListener**() {
@Override
public void onClick(View arg0) {
pbLogin.setVisibility(ProgressBar.VISIBLE);
setConnection();
getID(txtUserName, pbLogin);
}
});
}
}
Segment 2 (2 errors): In this part the errors are at the LoginDialogListener class and the onComplete(Bundle values) inside that class.
package com.outfit.first;
import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.Facebook;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;
public abstract class FBConnectionActivity extends Activity {
public static final String TAG = "FACEBOOK";
private Facebook mFacebook;
public static final String APP_ID = "136907069717004";
private AsyncFacebookRunner mAsyncRunner;
private static final String[] PERMS = new String[] { "read_stream" };
private SharedPreferences sharedPrefs;
private Context mContext;
private TextView username;
private ProgressBar pb;
public void setConnection() {
mContext = this;
mFacebook = new Facebook(APP_ID);
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
}
public void getID(TextView txtUserName, ProgressBar progbar) {
username = txtUserName;
pb = progbar;
if (isSession()) {
Log.d(TAG, "sessionValid");
mAsyncRunner.**request**("me", new IDRequestListener());
} else {
// no logged in, so relogin
Log.d(TAG, "sessionNOTValid, relogin");
mFacebook.**authorize**(this, PERMS, new LoginDialogListener());
}
}
public boolean isSession() {
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
String access_token = sharedPrefs.getString("access_token", "x");
Long expires = sharedPrefs.getLong("access_expires", -1);
Log.d(TAG, access_token);
if (access_token != null && expires != -1) {
mFacebook.setAccessToken(access_token);
mFacebook.setAccessExpires(expires);
}
return mFacebook.isSessionValid();
}
private class **LoginDialogListener** implements DialogListener {
@Override
public void **onComplete(Bundle values)** {
Log.d(TAG, "LoginONComplete");
String token = mFacebook.getAccessToken();
long token_expires = mFacebook.getAccessExpires();
Log.d(TAG, "AccessToken: " + token);
Log.d(TAG, "AccessExpires: " + token_expires);
sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(mContext);
sharedPrefs.edit().putLong("access_expires", token_expires)
.commit();
sharedPrefs.edit().putString("access_token", token).commit();
mAsyncRunner.request("me", new IDRequestListener());
}
@Override
public void onFacebookError(FacebookError e) {
Log.d(TAG, "FacebookError: " + e.getMessage());
}
@Override
public void onError(DialogError e) {
Log.d(TAG, "Error: " + e.getMessage());
}
@Override
public void onCancel() {
Log.d(TAG, "OnCancel");
}
}
private class IDRequestListener implements RequestListener {
@Override
public void onComplete(String response, Object state) {
try {
Log.d(TAG, "IDRequestONComplete";);
Log.d(TAG, "Response: " + response.toString());
JSONObject json = Util.parseJson(response);
final String id = json.getString("id");
final String name = json.getString("name");
FBConnectionActivity.this.runOnUiThread(new Runnable() {
public void run() {
username.setText("Welcome: " + name+"\n ID: "+id);
pb.setVisibility(ProgressBar.GONE);
}
});
} catch (JSONException e) {
Log.d(TAG, "JSONException: " + e.getMessage());
} catch (FacebookError e) {
Log.d(TAG, "FacebookError: " + e.getMessage());
}
}
@Override
public void onIOException(IOException e, Object state) {
Log.d(TAG, "IOException: " + e.getMessage());
}
@Override
public void onFileNotFoundException(FileNotFoundException e,
Object state) {
Log.d(TAG, "FileNotFoundException: " + e.getMessage());
}
@Override
public void onMalformedURLException(MalformedURLException e,
Object state) {
Log.d(TAG, "MalformedURLException: " + e.getMessage());
}
@Override
public void onFacebookError(FacebookError e, Object state) {
Log.d(TAG, "FacebookError: " + e.getMessage());
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mFacebook.authorizeCallback(requestCode, resultCode, data);
}
}
Ctrl-Shift-o and everything should work(it does for me atleast)
Imports needed for first activity:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
And for the second :
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.AsyncFacebookRunner.RequestListener;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
import com.facebook.android.Util;
这篇关于Facebook的Android SDK中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!