【发布时间】:2023-03-09 16:41:01
【问题描述】:
我正在关注我在该网站http://www.helloandroid.com/tutorials/using-facebook-sdk-android-development-part-2 上找到的教程,当我在类中插入 2 组代码段时,教程指定我得到 4 个与 facebook sdk 相关的错误。我插入下面的代码段,错误加粗/加星标。
有谁知道如何解决这些错误?
以下是当我将鼠标悬停在错误上时收到的错误消息,按顺序:
1.onCreate(Bundle savedInstanceState) : main 类型的方法 onCreate(Bundle) 必须重写或实现超类型方法
btnLogin.setOnClickListener(new OnClickListener() : OnClickListener 无法解析为类型
LoginDialogListener : 类型 FBConnectionActivity.LoginDialogListener 必须实现继承的抽象方法 Facebook.DialogListener.onComplete(Bundle)
onComplete(Bundle values) : FBConnectionActivity.LoginDialogListener 类型的 onComplete(Bundle) 方法必须覆盖或实现超类型方法
第 1 段(2 个错误): 在这部分中,错误出现在 oncreate 和 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 个错误):在这部分中,错误位于 LoginDialogListener 类和该类中的 onComplete(Bundle values)。
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);
}
}
【问题讨论】:
-
你能显示 logcat 以便我们查看错误内容吗?
-
嗯,当然。虽然我从未真正尝试过运行该程序,但我在编写代码时看到了 eclipse 中的错误。
-
哦,当您将鼠标悬停在有问题的代码上时,它会说什么?
-
我将鼠标悬停在消息上添加到原始问题的顶部。
-
对于按钮你应该导入 android.view.View.OnClickListener;事实上,试试按 ctrl-shift-o