我想在我的应用中引用我的脸书页面 因此,当用户按下按钮时,他将被定向到fb app中的fb页面 否则他将被导向浏览器中的fb页面 我不知道这是如何工作所以我应对代码 来自这篇文章
但我在(这)中得到错误,我似乎无法理解这个问题 这是代码
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
答案 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。