- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我必须从一个托管 fragment 的 Activity 中发布我的状态,并且在第一次使用应用程序时登录到应用程序后,当我尝试更新状态时出现异常。我得到这个异常(exception)。
“ session :尝试为具有待处理请求的 session 请求新权限。”
这是我的 fragment 代码
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings.Secure;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.carfrenzy.activities.FeedsActivity;
import com.carfrenzy.activities.SelectCarActivity;
import com.carfrenzy.activities.TourActivity;
import com.carfrenzy.activities.UserProfileActivity;
import com.carfrenzy.app.R;
import com.carfrenzy.beans.CFConstants;
import com.carfrenzy.beans.UserProfileInfo;
import com.carfrenzy.ui.ProgressBarDialog;
import com.carfrenzy.webservices.WebHttpServicesManager;
import com.facebook.FacebookRequestError;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.RequestAsyncTask;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.widget.LoginButton;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.turbomanage.httpclient.AsyncCallback;
import com.turbomanage.httpclient.HttpResponse;
public class MainFragment extends Fragment
{
private UiLifecycleHelper uiHelper;
String accessToken = "";
SharedPreferences mprefs;
String mTutorial = "";
static Context context;
static Context mcontext;
Button login;
EditText etemail, etpass;
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private static final List<String> EMAIL_PERMISSIONS = Arrays.asList("email");
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
private static boolean pendingPublishReauthorization = false;
final String pushNotificationToken = "";
String android_id = "";
String pushToken = "";
private static final String TAG = "MainFragment";
ImageView iemail;
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, Arrays.asList("email"));
LoginButton authButton = null;
//private ProgressDialog mProgressDialog = null;
Handler handler;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
context = getActivity().getBaseContext();
mcontext = getActivity();
View view = inflater.inflate(R.layout.startup, container, false);
etemail = (EditText) view.findViewById(R.id.etUser);
etpass = (EditText) view.findViewById(R.id.etPass);
login = (Button) view.findViewById(R.id.bLoginNew);
login.setEnabled(true);
authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setBackgroundResource(R.drawable.logo_facebook);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList("email"));
View viewp = inflater.inflate(R.layout.user_mycar_home, container, false);
/***************/
android_id = Secure.getString(getActivity().getContentResolver(), Secure.ANDROID_ID);
login.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (etemail.getText().toString().equals("") || etpass.getText().toString().equals(""))
{
Toast.makeText(context, "Please enter your email address and password to login", Toast.LENGTH_SHORT).show();
}
else if (etpass.getText().toString().length() < 6)
{
Toast.makeText(context, "Password is invalid. It should be atleast 6 characters", Toast.LENGTH_SHORT).show();
}
else if (etpass.getText().toString().length() > 5)
{
//pushToken=getRegistrationId(context);
//Log.i("Audit", pushToken);
//mProgressDialog = ProgressDialog.show(getActivity(),
// "Cruising...","", true);
//mProgressDialog.setCancelable(true);
final ProgressBarDialog dialogBar = new ProgressBarDialog(getActivity(), "Cruising...");
//
dialogBar.show();
pushToken= mprefs.getString("PROPERTY_REG_ID", "");
Log.i("Audit", pushToken);
new WebHttpServicesManager(context).signInWithEmail(etemail.getText().toString(), etpass.getText().toString(), android_id.toString(), pushToken.toString(), new AsyncCallback()
{
@Override
public void onComplete(HttpResponse httpResponse)
{
dialogBar.dismiss();
if (httpResponse != null && httpResponse.getStatus() == 200)
{
//mProgressDialog.dismiss();
String responseString = WebHttpServicesManager.decompress(httpResponse.getBody());
JSONObject jsonResponse=null;
JSONObject status;
JsonParser parser = new JsonParser();
JsonObject o = (JsonObject)parser.parse(responseString);
try
{
if( o!=null && o.get("status").getAsString().equals("1"))
{
jsonResponse = new JSONObject(responseString);
JSONObject response = jsonResponse.getJSONObject("response");
String active1 = response.getString("activeSalt");
mprefs.edit().putString("activeSalt", active1).commit();
Boolean tour = mprefs.getBoolean(TourActivity.SharedPrefKey, false);
if (tour)
{
// Intent intent = new
// Intent(context,TourActivity.class);
// startActivity(intent);
// tourDon();
}
}
else
{
jsonResponse = new JSONObject(responseString);
JSONObject response = jsonResponse.getJSONObject("response");
Toast.makeText(context, "Error:"+ response.toString(), Toast.LENGTH_SHORT).show();
}
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
String isTutorial = mprefs.getString("isTutorial", "");
// if(isTutorial.equalsIgnoreCase("1"))
// {
// Intent in = new Intent(context, SelectCarActivity.class);
// in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// login.setEnabled(false);
// startActivity(in);
// getActivity().finish();
// }
// else
// {
Intent in = new Intent(context, UserProfileActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
login.setEnabled(false);
startActivity(in);
// Log.i("SignIn", "Success");
getActivity().finish();
return;
//}
}
else if (httpResponse !=null && httpResponse.getStatus()==401)
{
// AlertDialog.Builder alert = new AlertDialog.Builder(context).setTitle("Oops").setMessage("Cannot connect to server please Try again with valid email and password!").setNeutralButton("OK", null);
// AlertDialog alert1 = alert.create();
// alert1.show();
String responseString = WebHttpServicesManager.decompress(httpResponse.getBody());
//JSONObject jsonResponse=null;
JsonParser parser = new JsonParser();
JsonObject o = (JsonObject)parser.parse(responseString);
String message = o.get("response").getAsString();
AlertDialog.Builder alert = new AlertDialog.Builder(mcontext).setTitle("Error").setMessage(" " +message ).setNeutralButton("OK", null);
alert.show();
}
else
{
AlertDialog.Builder alert = new AlertDialog.Builder(mcontext).setTitle("Oops").setMessage("Cannot connect to server. Please Try again!" ).setNeutralButton("OK", null);
alert.show();
}
}
@Override
public void onError(Exception e, int errorCode)
{
super.onError(e, errorCode);
//mProgressDialog.dismiss();
dialogBar.dismiss();
if (errorCode == CFConstants.INTERNET_NOT_AVAILABLE)
{
// AlertDialog.Builder alert = new AlertDialog.Builder(context).setTitle("No Internet Connectivity").setMessage("Please Check Your Internet Connection and Try again!").setNeutralButton("OK", null);
// AlertDialog alert1 = alert.create();
// alert1.show();
Toast toast = Toast.makeText(mcontext, "Please Check Your Internet Connection and Try again!", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
Log.i("SignIn", "Error");
}
@Override
public void onComplete(org.apache.http.HttpResponse httpResponse)
{
// TODO Auto-generated method stub
//mProgressDialog.dismiss();
dialogBar.dismiss();
}
});
}
}
});
if (savedInstanceState != null) {
pendingPublishReauthorization =
savedInstanceState.getBoolean(PENDING_PUBLISH_KEY, false);
}
return view;
}
private void onSessionStateChange(Session session, SessionState state, Exception exception)
{
if (pendingPublishReauthorization &&
state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
pendingPublishReauthorization = false;
publishStory();
}
if (state.isOpened())
{
if (pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED))
{
pendingPublishReauthorization = false;
publishStory();
}
else if (!pendingPublishReauthorization)
{
try
{
Log.i("Audit", "Logged in...");
Log.i("fb2", accessToken);
// Check for email permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(EMAIL_PERMISSIONS, permissions))
{
session.requestNewReadPermissions(newPermissionsRequest);
return;
}
accessToken = session.getAccessToken();
UserProfileInfo.setAccessToken(accessToken);
pushToken= mprefs.getString("PROPERTY_REG_ID", "");
facebookLogin(accessToken, pushToken);
}
catch(Exception e )
{
e.printStackTrace();
}
}
}
else if (state.isClosed())
{
Toast.makeText(context, "Error: Can't Login through Facebook! Please try again later!", Toast.LENGTH_SHORT).show();
}
}
private Session.StatusCallback callback = new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
onSessionStateChange(session, state, exception);
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
mprefs = getActivity().getSharedPreferences("com.carfrenzy.app", getActivity().MODE_PRIVATE);
android_id = Secure.getString(getActivity().getContentResolver(), Secure.ANDROID_ID);
pushToken= mprefs.getString("PROPERTY_REG_ID", "");
Boolean firstTour = mprefs.getBoolean(TourActivity.firstTimTour, false);
}
@Override
public void onResume()
{
super.onResume();
// For scenarios where the main activity is launched and user
// session is not null, the session state change notification
// may not be triggered. Trigger it if it's open/closed.
Session session = Session.getActiveSession();
if (session != null && (session.isOpened() || session.isClosed()))
{
onSessionStateChange(session, session.getState(), null);
}
uiHelper.onResume();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
Log.v("in activity result of :::", "Main fragment");
uiHelper.onActivityResult(requestCode, resultCode, data);
//Session.getActiveSession().onActivityResult((Activity) context, requestCode, resultCode, data);
Log.i("Audit", "I am here in Result of fragment");
}
@Override
public void onPause()
{
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy()
{
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization);
uiHelper.onSaveInstanceState(outState);
}
private void facebookLogin(final String accessToken, final String pushToken)
{
String mAccessToken = UserProfileInfo.getAccessToken();
Log.i("Audit", mAccessToken);
// final ProgressBarDialog dialogBar = new ProgressBarDialog(context, "Cruising...");
// dialogBar.show();
Toast toast = Toast.makeText(mcontext, "Fetching data from Facebook Servers! This may take few seconds!", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
//Toast.makeText(context, "Fetching data from Facebook Servers! This may take few seconds!", Toast.LENGTH_SHORT).show();
new WebHttpServicesManager(getActivity()).signInFacebook("1", accessToken.toString(), android_id.toString(), pushToken.toString(), new AsyncCallback()
{
public void onComplete(HttpResponse httpResponse)
{
// dialogBar.dismiss();
if (httpResponse != null && httpResponse.getStatus() == 200)
{
String responseString = WebHttpServicesManager.decompress(httpResponse.getBody());
Log.e("SignUp", " Server data : " + httpResponse.getBodyAsString());
JSONObject jsonResponse = null;
JSONObject status;
JsonParser parser = new JsonParser();
JsonObject o = (JsonObject) parser.parse(responseString);
try
{
if (o != null && o.get("status").getAsString().equals("1"))
{
jsonResponse = new JSONObject(responseString);
JSONObject response = jsonResponse.getJSONObject("response");
String active1 = response.getString("activeSalt");
mprefs.edit().putString("activeSalt", active1).commit();
mTutorial = response.getString("userTutorial");
mprefs.edit().putString("userTutorial", mTutorial);
String suggestedTour = response.getString("isSuggestedTour");
mprefs.edit().putString("suggestedTour", suggestedTour);
}
else
{
jsonResponse = new JSONObject(responseString);
JSONObject response = jsonResponse.getJSONObject("response");
Toast.makeText(context, "Error:" + response.toString(), Toast.LENGTH_SHORT).show();
}
}
catch (JSONException e)
{
e.printStackTrace();
}
if (mTutorial.toString().equals("1"))
{
Intent intent = new Intent(getActivity(), SelectCarActivity.class);
intent.putExtra("fbAccessToken", accessToken);
getActivity().startActivity(intent);
Log.i("SignInFacebook", "Success");
}
else if (mTutorial.toString().equals("0"))
{
Intent intent = new Intent(getActivity(), FeedsActivity.class);
intent.putExtra("fbAccessToken", accessToken);
getActivity().startActivity(intent);
}
}
else if (httpResponse != null && httpResponse.getStatus() == 401)
{
//new AlertDialog.Builder(context).setTitle("Cannot connect to server").setMessage("We cannot connect to server! Please try again Later!").setNeutralButton("OK", null).show();
// dialogBar.dismiss();
Toast.makeText(context, "We cannot connect to server! Please try again Later!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(Exception e, int errorCode)
{
super.onError(e, errorCode);
// dialogBar.dismiss();
if (errorCode == CFConstants.INTERNET_NOT_AVAILABLE)
{
//new AlertDialog.Builder(context).setTitle("No Internet Connectivity").setMessage("Please Check Your Internet Connection and Try again!").setNeutralButton("OK", null).show();
// dialogBar.dismiss();
Toast.makeText(context, "Please Check Your Internet Connection and Try again!", Toast.LENGTH_LONG).show();
}
Log.i("SignUp", "error");
}
@Override
public void onComplete(org.apache.http.HttpResponse httpResponse)
{
// dialogBar.dismiss();
}
});
}
public static void publishStory()
{
Session session = Session.getActiveSession();
if (session != null)
{
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions))
{
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest((Activity) mcontext, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
final ProgressBarDialog dialogBar = new ProgressBarDialog(mcontext, "Cruising...");
//
dialogBar.show();
Bundle postParams = new Bundle();
postParams.putString("name", "Motoqlik");
postParams.putString("caption", "You can now Look out for road users via motoqlik");
postParams.putString("description", "A smart new way to look out for road users! Look out for one another on roads and car park!");
postParams.putString("link", "http://www.motoqlik.com/");
postParams.putString("picture", "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-frc3/c57.33.414.414/s160x160/972186_590988330944636_1055194609_n.png");
Request.Callback callback = new Request.Callback()
{
public void onCompleted(Response response)
{
dialogBar.dismiss();
if (response != null)
{
JSONObject graphResponse = response.getGraphObject().getInnerJSONObject();
String postId = null;
try
{
postId = graphResponse.getString("id");
Log.i(TAG, "postId " + postId);
Toast.makeText(context, "Shared on your profile"+ postId, Toast.LENGTH_LONG).show();
// AlertDialog.Builder alert = new AlertDialog.Builder(context).setTitle("Success").setMessage("Shared on your wall" + postId).setNeutralButton("OK", null);
//alert.show();
}
catch (JSONException e)
{
Log.i(TAG, "JSON error " + e.getMessage());
}
FacebookRequestError error = response.getError();
if (error != null)
{
Toast.makeText((Activity) context, error.getErrorMessage(), Toast.LENGTH_SHORT).show();
//AlertDialog.Builder alert = new AlertDialog.Builder(context).setTitle("Sharing Error").setMessage("Cannot connect to facebook Servers!" + error.getErrorMessage()).setNeutralButton("OK", null);
//alert.show();
}
else
{
}
}
else
{
Toast.makeText(context, "Could not Connect to Facebook!", Toast.LENGTH_LONG).show();
// AlertDialog.Builder alert = new AlertDialog.Builder(context).setTitle("Sharing Error").setMessage("Cannot connect to facebook Servers!").setNeutralButton("OK", null);
//alert.show();
}
}
};
Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback);
RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
}
}
private static boolean isSubsetOf(Collection<String> subset, Collection<String> superset)
{
for (String string : subset)
{
if (!superset.contains(string))
{
return false;
}
}
return true;
}
}
publishStory() 方法是在我的墙上张贴的实际方法。正在从主机 Activity 调用此方法。并且 UILifeCycleHelper 处理是在 fragment 的 onActivityResult 中完成的,但是 fragment 的 onActivityResult 在发布故事后没有被调用。只有当用户第一次使用该应用程序并尝试发布到 facebook 时才会发生这种情况。如果他注销并再次登录,那么他可以成功发布并且不会引发异常。任何形式的帮助将不胜感激,
感谢和问候,穆纳扎
最佳答案
嘿,改用这个库来进行 facebook 授权。
关于android - 从android更新状态时Facebook挂起授权异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19005186/
我为我们的业务创建了一个 Facebook 页面,我创建了一个 Facebook 应用程序来获取 AppID,以便在 Facebook 插件中使用它。 我注意到 Facebook 应用程序的页面看起来
是否有可能知道哪个 Facebook 用户点击了我的应用用户在 Facebook 上分享的链接? 为了清楚起见,让我改写一下:我想知道我的应用用户的哪些 friend 点击了他的共享链接。 感谢任何提
我正在浏览 facebook pixel,对 facebook pixel 如何知道哪个转化来自哪个 facebook 广告感到很困惑? 假设我有这个 url http://example.com安装
我正在开发 sucsongmoi.net(越南语),当浏览者从他们的墙上分享网站链接时,一些链接 facebook 获得描述和图像,一些链接 facebook 无法获得描述和图像。 例如:分享 suc
一位同事错误地设置了个人 Facebook 页面;它应该是一个企业 Facebook 页面。 个人页面上有几个 friend 需要重定向到正确的 Facebook 业务页面。 我可以将用户从错误的个人
在 Facebook 上,当您转到“编辑我的个人资料”>“艺术和娱乐”时,会有一个“电影”自动完成小部件,它会在您输入电影时推荐电影。 因此,如果您输入“Jones”,它将开始建议: 印第安纳琼斯 布
我在我的网页上使用 Facebook 登录。首次登录时,Facebook 登录应用程序会请求获取用户数据的权限。 有什么方法可以改善这个问题,以请求喜欢我的 Facebook 页面的许可?用户点击后,
我需要知道是否可以将现有的 Facebook 页面(类别:应用程序页面)链接到 Facebook 应用程序?当我进入 Facebook 应用程序设置时,他们建议创建一个新页面。但我需要的只是链接到现有
我的网站应用程序具有通过 Facebook 登录进行登录的功能。为此,我的应用程序出现在 Facebook 上。使用 Facebook 登录工作正常。 但应用程序具有将 Facebook 帐户链接和取
我正在制作一个应用程序,让人们可以在 Facebook 上与特定的 friend 分享内容。示例:Alice 使用我的应用程序,她与 Bob 分享了一篇文章,Bob 是她的 Facebook 好友。现
我正在按照列出的说明进行操作 http://docs.appcelerator.com/platform/latest/#!/api/Modules.Facebook 并查看 Arrow 示例目录中的
假设我有一个餐厅的商业网站,一位顾客为一大群人预订了一张 table 。有没有一种方法可以让客户有机会在餐厅网站上创建 Facebook 事件,作为预订流程的一部分。我知道客户必须以某种方式从餐厅网站
我想让我的用户将他们的用户帐户与 Facebook 或 Twitter 相关联,并允许他们使用他们的 Facebook/Twitter 帐户登录我的服务器,而不是使用传统的用户名/密码。与StackO
我们有一个面子书页面。我们添加了一个自定义 FBML 选项卡。现在我们要添加评论面子书插件。我尝试添加一个脚本,我从 Face book Social Plug in .代码是 之后我将此脚本放入自
大家好 请帮我找到关于以下的官方信息: 1) 什么是“FaceBook 登录” 2) 什么是“FaceBook Connect” 谢谢 最佳答案 你可以在那里找到你需要的一切: http://deve
这是最奇怪的事情。我有非常简单的 CF 代码,查看 cgi.HTTP_REFERER。简单地说,它查看推荐人。如果链接是从我们的主要网站域之外单击的,它会显示一些内容。否则,什么也不会发生。所以,如果
我还是 Facebook Graph API 的新手,正在尝试开始使用 Facebook 地点搜索。 (按位置搜索地点) https://graph.facebook.com/search?type=
我不想开设 Facebook 帐户,但我被要求为需要使用 Facebook API 的应用程序开发功能。有没有一种方法可以开发这些功能并使用 Facebook API,而无需开设个人 Facebook
我已经按照指示实现了 DotNetOpenAuth 提供的示例应用程序 here . 正如您在下面看到的,这要求用户安装此 facebook 应用程序。 我只是想让用户使用他们的 Facebook 登
我的主页上有标准的 Facebook 登录按钮,我不希望人们仅在用户单击登录按钮时使用他们的 Facebook 帐户自动登录我的网站。 如果用户未登录 Facebook,将出现一个弹出窗口询问他的凭据
我是一名优秀的程序员,十分优秀!