用一个按钮打开facebook页面上的android错误

时间:2016-08-10 20:48:29

标签: android facebook facebook-graph-api

我想在我的应用中引用我的脸书页面 因此,当用户按下按钮时,他将被定向到fb app中的fb页面 否则他将被导向浏览器中的fb页面 我不知道这是如何工作所以我应对代码 来自这篇文章

enter link description here

但我在(这)中得到错误,我似乎无法理解这个问题 这是代码

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
public class info_popup extends Activity {
public static String FACEBOOK_URL = "https://www.facebook.com/ahmednageebobiad";
public static String FACEBOOK_PAGE_ID = "Ahmed Nageeb";
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_info_popup);






        DisplayMetrics DM = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(DM);
        int Width = DM.widthPixels;
        int Hieght = DM.heightPixels;
        getWindow().setLayout((int) (Width * .8), (int) (Hieght * .6));

        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {










                Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
                String facebookUrl = getFacebookPageURL(this);
                facebookIntent.setData(Uri.parse(facebookUrl));
                startActivity(facebookIntent);
            }


        });

//method to get the right URL to use in the intent



}
    public String getFacebookPageURL(Context context) {
        PackageManager packageManager = context.getPackageManager();
        try {
            int versionCode = packageManager.getPackageInfo("com.facebook.katana", 0).versionCode;
            if (versionCode >= 3002850) { //newer versions of fb app
                return "fb://facewebmodal/f?href=" + FACEBOOK_URL;
            } else { //older versions of fb app
                return "fb://page/" + FACEBOOK_PAGE_ID;
            }
        } catch (PackageManager.NameNotFoundException e) {
            return FACEBOOK_URL; //normal web url
        }
    }
}

这是错误

    Error:(50, 38) error: method getFacebookPageURL in class info_popup cannot be applied to given types;
required: Context
found: <anonymous OnClickListener>
reason: actual argument <anonymous OnClickListener> cannot be converted to Context by method invocation conversion

2 个答案:

答案 0 :(得分:1)

你的任务:

String facebookUrl = getFacebookPageURL(this);

在范围内,this是指您的匿名View.OnClickListener

您需要将作业语句更改为:

String facebookUrl = getFacebookPageURL(info_popup.this);

...正确引用您的Activity实例。

答案 1 :(得分:1)

问题在于以下片段:

    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent facebookIntent = new Intent(Intent.ACTION_VIEW);
            String facebookUrl = getFacebookPageURL(this);
            facebookIntent.setData(Uri.parse(facebookUrl));
            startActivity(facebookIntent);
        }

    });

当你调用getFacebookPageURL时,你在View.OnClickListener类型的匿名类中,因此当你传递“this”时,你传递的是View.OnClickListener类的实例,但是getFacebookPageURL接受了Context对象。您的问题的解决方案是使用

getFacebookPageURL(info_popup.this)

或为Context实例创建字段,如:

private Context mContext;
public class info_popup extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        ...
        getFacebookPageURL(mContext)
}

最后但并非最不重要的是,在声明对象名称时使用camelcase表示法是一种好习惯,因此在您的情况下,info_popup应格式化为InfoPopup。