【问题标题】:Facebook Android SDK problemsFacebook Android SDK 问题
【发布时间】: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) 必须重写或实现超类型方法

  1. btnLogin.setOnClickListener(new OnClickListener() : OnClickListener 无法解析为类型

  2. LoginDialogListener : 类型 FBConnectionActivity.LoginDialogListener 必须实现继承的抽象方法 Facebook.DialogListener.onComplete(Bundle)

  3. 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

标签: android facebook


【解决方案1】:

Ctrl-Shift-o 一切正常(至少对我有用)

第一次活动所需的进口:

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;

第二个:

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;

【讨论】:

  • 非常感谢,这太棒了!这就像我在这里得到的最快的修复。那么,当我将鼠标悬停在错误上时,为什么这些导入没有出现?
  • 嘿,还有一个问题,希望您不要介意。当我将连接活动添加到清单时,即 我收到错误消息“在此行找到多个注释: - 元素类型“活动”必须后跟属性规范“>”或“/>”。 - 属性“/”没有值 - 属性“”没有值”
  • 去掉中间的分号——用空格隔开
  • 顺便说一句,因为在我更喜欢以这种方式添加活动之前我遇到了问题:单击 AndroidManifest.xml,您应该会被带到 XML 文件。在文件下方,您应该会看到选项卡(清单、应用程序、权限...)。单击应用程序并向下滚动,单击添加并选择活动,然后突出显示新活动并单击蓝色字段名称* - 只需填写名称和任何其他信息,它就会为您添加所有内容
  • 谢谢。所以现在我有了这些类以及清单和 xml 设置,我希望能够通过按下按钮从我的主要活动启动 facebook sdk。我尝试使用此代码Intent myIntent = new Intent(view.getContext(), FBConnectionActivity.class); startActivityForResult(myIntent, 0); ,但我在 logcat 中遇到各种错误并且它崩溃了。还有其他方法可以做到这一点吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2012-12-05
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多