中出現異常「無法在線程中創建處理程序,但尚未調用looper prepare」我正在處理我的第一個android應用程序,並試圖將Quickblox.com用作我的後端。在android應用程序
爲了使用它,我需要通過使用他們的SDK創建會話來授權應用程序。
所以,我有以下代碼:
// Initialize QuickBlox application with credentials.
QBSettings.getInstance().fastConfigInit(Consts.APP_ID, Consts.AUTH_KEY, Consts.AUTH_SECRET);
// Authorize application
QBAuth.createSession(new QBCallback() {
@Override public void onComplete(Result result) {}
@Override
public void onComplete(Result result, Object context) {
if (result.isSuccess()) {
showMainScreen();
} else {
// print errors that came from server
Toast.makeText(getBaseContext(), result.getErrors().get(0), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.INVISIBLE);
}
}
}, QBQueries.QB_QUERY_AUTHORIZE_APP);
此代碼與仿真效果很好,但如果我試圖用一個真正的Android手機這是行不通的。我有連接超時錯誤。我想我需要在後臺進行這種請求(Web服務)嗎?
於是,我就用的AsyncTask使在後臺QB的請求,並改變了代碼如下:
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// Initialize QuickBlox application with credentials.
QBSettings.getInstance().fastConfigInit(Consts.APP_ID, Consts.AUTH_KEY, Consts.AUTH_SECRET);
// Authorize application
QBAuth.createSession(new QBCallback() {
@Override public void onComplete(Result result) {}
@Override
public void onComplete(Result result, Object context) {
if (result.isSuccess()) {
showMainScreen();
} else {
// print errors that came from server
Toast.makeText(getBaseContext(), result.getErrors().get(0), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.INVISIBLE);
}
}
}, QBQueries.QB_QUERY_AUTHORIZE_APP);
return null;
}
}.execute();
我在所以在這裏看到了很多類似的問題,但我似乎無法找到適用於我的代碼的答案。我看到的是與UI處理功能,需要從主線程調用,所以我想,我的代碼裏面有
onComplete(Result result, Object context)
應該是這樣的權利塊裏面?
runOnUiThread(new Runnable()
{
public void run()
{
// code here
}
});
但我試過,以及它沒有工作。任何猜測?
我相信這個問題並不是因爲Toast和showMainScreen()。它仍然失敗,此代碼:
// Initialize QuickBlox application with credentials.
QBSettings.getInstance().fastConfigInit(Consts.APP_ID, Consts.AUTH_KEY, Consts.AUTH_SECRET);
QBAuth.createSession(new QBCallback() {
@Override
public void onComplete(Result arg0, Object arg1) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Result arg0) {
// TODO Auto-generated method stub
}
}, QBQueries.QB_QUERY_AUTHORIZE_APP);
但如果我只是創建QBCallback對象,不把它傳遞給QBAuth.createSession功能也不會失敗。
即使我把它放在runOnUiThread中? –
我不能這樣做,因爲它不會讓我在新的QBCallback()中使用變量'res'。 –
使它全球..然後它會.. – bakriOnFire