2015-03-19 98 views
0

所以我花了整整一个早上试图为我的应用程序实现一个Facebook共享按钮,我不完全明白它的工作原理。Android - 如何正确实施Facebook分享?

我试图按照本指南:https://developers.facebook.com/docs/android/share

的“getActivity()”(其中5人在的onComplete)方法给出错误“无法解析法‘getActivity()’,我迷路了现在做什么我已经试过标记与Facebook共享有关的所有内容以便更容易阅读这里我可以补充说,在添加共享功能之前,一切工作都很完美我可能已经将代码放入错误的地方或误解了指南,所以任何额外的指导将不胜感激。

Results.java

package com.example.xxx.zzz; 

import android.content.Intent; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 

//START: FACEBOOK - SHARE 
import com.facebook.FacebookException; 
import com.facebook.FacebookOperationCanceledException; 
import com.facebook.Session; 
import com.facebook.UiLifecycleHelper; 
import com.facebook.widget.FacebookDialog; 
import com.facebook.widget.WebDialog; 
//END: FACEBOOK - SHARE 

public class Results extends FragmentActivity { 

    //START: FACEBOOK - SHARE 
    private UiLifecycleHelper uiHelper; 
    //END: FACEBOOK - SHARE 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     //START: FACEBOOK - SHARE 
     uiHelper = new UiLifecycleHelper(this, null); 
     uiHelper.onCreate(savedInstanceState); 
     //END: FACEBOOK - SHARE 

     themeUtils.onActivityCreateSetTheme(this); 
     setContentView(R.layout.activity_results); 

     Bundle BMIData = getIntent().getExtras(); 
     if (BMIData == null) { 
      return; 
     } 

     String BMIMessage = BMIData.getString("BMIMessage"); 
     String BMIText = BMIData.getString("BMIText"); 
     final TextView ResultBMITextView = (TextView) findViewById(R.id.ResultBMITextView); 
     final TextView ResultBMITextTextView = (TextView) findViewById(R.id.ResultBMITextTextView); 
     ResultBMITextView.setText(BMIMessage); 
     ResultBMITextTextView.setText(BMIText); 
    } 

    public void onClickResultsBack(View view) { 
     Intent i1 = new Intent(this, MainActivity.class); 
     i1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(i1); 
     finish(); 
    } 

    //START: FACEBOOK - SHARE 
    public void onClickShare() { 
     if (FacebookDialog.canPresentShareDialog(getApplicationContext(), 
       FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) { 
      FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this) 
        .setLink("https://developers.facebook.com/android") 
        .build(); 
      uiHelper.trackPendingDialogCall(shareDialog.present()); 
     } else { 
      FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this) 
        .setLink("https://developers.facebook.com/android") 
        .build(); 
      uiHelper.trackPendingDialogCall(shareDialog.present()); 
     } 
     publishFeedDialog(); 
    } 

    private void publishFeedDialog() { 
     Bundle params = new Bundle(); 
     params.putString("name", "Facebook SDK for Android"); 
     params.putString("caption", "Build great social apps and get more installs."); 
     params.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps."); 
     params.putString("link", "https://developers.facebook.com/android"); 
     params.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"); 

     WebDialog feedDialog = (
       new WebDialog.FeedDialogBuilder(getActivity(), 
         Session.getActiveSession(), 
         params)) 
       .setOnCompleteListener(new WebDialog.OnCompleteListener() { 

        @Override 
        public void onComplete(Bundle values, 
              FacebookException error) { 
         if (error == null) { 
          // When the story is posted, echo the success 
          // and the post Id. 
          final String postId = values.getString("post_id"); 
          if (postId != null) { 
           Toast.makeText(getActivity(), 
             "Posted story, id: " + postId, 
             Toast.LENGTH_SHORT).show(); 
          } else { 
           // User clicked the Cancel button 
           Toast.makeText(getActivity().getApplicationContext(), 
             "Publish cancelled", 
             Toast.LENGTH_SHORT).show(); 
          } 
         } else if (error instanceof FacebookOperationCanceledException) { 
          // User clicked the "x" button 
          Toast.makeText(getActivity().getApplicationContext(), 
            "Publish cancelled", 
            Toast.LENGTH_SHORT).show(); 
         } else { 
          // Generic, ex: network error 
          Toast.makeText(getActivity().getApplicationContext(), 
            "Error posting story", 
            Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }) 
       .build(); 
     feedDialog.show(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() { 
      @Override 
      public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) { 
       Log.e("Activity", String.format("Error: %s", error.toString())); 
      } 

      @Override 
      public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { 
       Log.i("Activity", "Success!"); 
      } 
     }); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     uiHelper.onResume(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     uiHelper.onSaveInstanceState(outState); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 
    //END: FACEBOOK - SHARE 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_u, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

activity_results.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.example.xxx.zzz.Results"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/ResultsBackButtonString" 
     android:id="@+id/ResultsBackButton" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:onClick="onClickResultsBack"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="BMI: " 
     android:id="@+id/ResultTitleTextView" 
     android:layout_alignParentTop="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:id="@+id/ResultBMITextView" 
     android:text="22.5" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/ResultTitleTextView" 
     android:layout_toEndOf="@+id/ResultTitleTextView" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:id="@+id/ResultBMITextTextView" 
     android:layout_marginTop="20dp" 
     android:layout_below="@+id/ResultTitleTextView" 
     android:layout_alignLeft="@+id/ResultTitleTextView" 
     android:layout_alignStart="@+id/ResultTitleTextView" /> 

    <com.facebook.widget.LoginButton 
     android:id="@+id/authButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:onClick="onClickShare" /> 
> 
</RelativeLayout> 

回答

0

所以经过大量的搜索,我发现我不得不改变什么的。

getActivity()替换为Results.this在所有5个地方。