编辑:尝试更新Facebook的SDK,仍然无法正常工作。Facebook共享是否有一个优雅的解决方案?
05-07 17:52:02.922 7584-7584/com.example.dan.bmicalculator E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3814)
at android.view.View.performClick(View.java:4421)
at android.view.View$PerformClick.run(View.java:17903)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3809)
at android.view.View.performClick(View.java:4421)
at android.view.View$PerformClick.run(View.java:17903)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: com.facebook.FacebookException: Attempted to use a Session that was not open.
at com.facebook.widget.WebDialog$BuilderBase.<init>(WebDialog.java:524)
at com.facebook.widget.WebDialog$FeedDialogBuilder.<init>(WebDialog.java:708)
at com.example.dan.bmicalculator.Results.publishFeedDialog(Results.java:138)
at com.example.dan.bmicalculator.Results.onClickShareFacebook(Results.java:98)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3809)
at android.view.View.performClick(View.java:4421)
at android.view.View$PerformClick.run(View.java:17903)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
这是基于前一个问题,我问,但没有得到任何回应:
https://stackoverflow.com/questions/30054645/application-crashing-when-using-facebook-share
TL; DR:BMI计算器应用程序的Android在社交媒体功能的份额。 Facebook的分享作品,但崩溃的应用程序。 https://dev.twitter.com/twitter-kit/android/compose
有没有简单和优雅的解决方案facebook的问题:
昨天我用这个优雅而简洁的指导完成了我的Twitter共享功能?或对崩溃问题的任何修复?
下面再次发布代码。
Results.java
package com.example.dan.bmicalculator;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
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.crashlytics.android.Crashlytics;
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
//TWITTER SHARE
import com.twitter.sdk.android.Twitter;
import com.twitter.sdk.android.core.TwitterAuthConfig;
import com.twitter.sdk.android.tweetcomposer.TweetComposer;
import java.io.File;
import io.fabric.sdk.android.Fabric;
public class Results extends Activity {
// Note: Your consumer key and secret should be obfuscated in your source code before shipping.
private static final String TWITTER_KEY = "I really shouldn't show this";
private static final String TWITTER_SECRET = "I really shouldn't show this";
//START: FACEBOOK - SHARE
private UiLifecycleHelper uiHelper;
//END: FACEBOOK - SHARE
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig), new Crashlytics());
final Fabric fabric = new Fabric.Builder(this)
.kits(new Crashlytics())
.debuggable(true)
.build();
Fabric.with(fabric);
Fabric.with(this, new TweetComposer());
//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();
}
public void onClickShareFacebook(View view) {
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();
return;
}
public void onClickShareTwitter(View view) {
File myImageFile = new File("C:\\Users\\Dan\\AndroidStudioProjects\\BMICalculator\\app\\src\\main\\res\\drawable");
Uri myImageUri = Uri.fromFile(myImageFile);
TweetComposer.Builder builder = new TweetComposer.Builder(this)
.text("just setting up my Fabric.")
.image(myImageUri);
builder.show();
return;
}
@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);
}
//START: FACEBOOK - SHARE
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(Results.this,
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(Results.this,
"Posted story, id: " + postId,
Toast.LENGTH_SHORT).show();
} else {
// User clicked the Cancel button
Toast.makeText(Results.this.getApplicationContext(),
"Publish cancelled",
Toast.LENGTH_SHORT).show();
}
} else if (error instanceof FacebookOperationCanceledException) {
// User clicked the "x" button
Toast.makeText(Results.this.getApplicationContext(),
"Publish cancelled",
Toast.LENGTH_SHORT).show();
} else {
// Generic, ex: network error
Toast.makeText(Results.this.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 */
}
错误日志:
05-06 12:27:26.442 4263-4263/com.example.dan.bmicalculator D/OpenGLRenderer﹕ Enabling debug mode 0
05-06 12:27:26.532 4263-4263/com.example.dan.bmicalculator D/OpenGLRenderer﹕ GL error from OpenGLRenderer: 0x502
05-06 12:27:26.532 4263-4263/com.example.dan.bmicalculator E/OpenGLRenderer﹕ GL_INVALID_OPERATION
05-06 12:27:30.496 4263-4263/com.example.dan.bmicalculator I/com.example.dan.bmicalculator﹕ onStartCommand method called
05-06 12:27:35.521 4263-4430/com.example.dan.bmicalculator I/com.example.dan.bmicalculator﹕ Service is doing something
05-06 12:27:40.517 4263-4430/com.example.dan.bmicalculator I/com.example.dan.bmicalculator﹕ Service is doing something
05-06 12:27:43.400 4263-4263/com.example.dan.bmicalculator D/AndroidRuntime﹕ Shutting down VM
05-06 12:27:43.400 4263-4263/com.example.dan.bmicalculator W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x420618b0)
05-06 12:27:43.430 4263-4263/com.example.dan.bmicalculator E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3814)
at android.view.View.performClick(View.java:4421)
at android.view.View$PerformClick.run(View.java:17903)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3809)
at android.view.View.performClick(View.java:4421)
at android.view.View$PerformClick.run(View.java:17903)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: com.facebook.FacebookException: Attempted to use a Session that was not open.
at com.facebook.widget.WebDialog$BuilderBase.<init>(WebDialog.java:524)
at com.facebook.widget.WebDialog$FeedDialogBuilder.<init>(WebDialog.java:708)
at com.example.dan.bmicalculator.Results.publishFeedDialog(Results.java:107)
at com.example.dan.bmicalculator.Results.onClickShareFacebook(Results.java:73)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3809)
at android.view.View.performClick(View.java:4421)
at android.view.View$PerformClick.run(View.java:17903)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
在此先感谢。
@signare这是不幸的,但他张贴这两个问题。 – BIW
你有没有在设备上安装facebook?因为你正在得到一个Facebook例外。 – BIW
升级您的Facebook SDK(4.1版本),它为我解决了一些SDK 3.x问题 – Kai