gpt4 book ai didi

java - onPostExecute Looper AsyncTask

转载 作者:行者123 更新时间:2023-12-01 15:21:29 24 4
gpt4 key购买 nike

我的 Android 应用程序允许用户从 Fragment 更新他们的 Facebook 状态。我已经实现了以下 AsyncTask,以便他们可以登录:

    public class updateFacebookTask extends AsyncTask<String, Void, Boolean> {
protected Boolean doInBackground(final String... message) {
Log.i(TAG, "Async UFT");

myFResult = false;

Looper.prepare();

if (loginAndPostToWall()) {
Log.i(TAG, "loginAndPostToWall Returned: " + myFResult);

myFResult = true;

} else {
Log.i(TAG, "loginAndPostToWall Returned: " + myFResult);

myFResult = false;
}


//Looper.loop();


return myFResult;
}

@Override
protected void onPreExecute() {
super.onPreExecute();

Log.i(TAG, "UFT - oPrE");

}
@Override
protected void onPostExecute(Boolean myFResult) {
super.onPostExecute(myFResult);

if (myFResult) {
Log.i(TAG, "UFT oPE - Success: " + myFResult);


} else {
Log.w(TAG, "UFT oPE - fail: " + myFResult);

}
}

AsyncTask 使用如下方法 loginAndPostToWall(),该方法实现了 DialogListener 作为 Facebook sdk 的一部分:

public boolean loginAndPostToWall() {

myFResult = false;

facebook.authorize(getActivity(), PERMISSIONS,
Facebook.FORCE_DIALOG_AUTH, new DialogListener() {

public void onComplete(Bundle values) {
Log.i(TAG, "LoginDialog Complete - Success");


myFResult = true;


}

public void onFacebookError(FacebookError error) {
Log.w(TAG,
"onFacebookError - Authentication with Facebook failed");


myFResult = false;

}

public void onError(DialogError error) {
Log.w(TAG,
"onError - Authentication with Facebook failed");
looper = false;
Log.i(TAG, "looper " + looper);

myFResult = false;

}

public void onCancel() {
Log.w(TAG,
"onCancel - Authentication with Facebook cancelled");


myFResult = false;

}
});


return myFResult;
}

我有两个问题确实需要帮助:

  1. LogInAndPostToWall 立即将 myFResult 返回为 false。我想要它做的是等到 webView 登录从 DialogListener 返回 onComplete (或错误)。我怎样才能让它在此时返回 myFResult 而不是之前?

  2. 如果我包含 Looper.loop(); onPostExecute 永远不会被调用。如果我不包括 Looper.prepare();我收到一条错误消息,说没有它我无法创建处理程序。我应该在某个地方调用 quit() 吗?

我已经在这个问题上坚持了两天(!),并且阅读了很多很多 SO 帖子 - 我尝试过使用可运行对象并记录所有内容正在运行的线程等,但没有任何乐趣。

预先感谢您救了我...

最佳答案

loginAndPostToWall() 应在 UI 线程上执行,因为它会修改 UI。 doInBackgorund() 方法从未在 UI 线程上执行,并且您不应该在其中包含 Looper.prepare() 或 Looper.loop() 代码。

关于java - onPostExecute Looper AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com