私の問題を明らかにするために私のタイトルを形成する方法を考えることができなかったので、ここに行きます:
初めてAsyncTaskに飛び込むことに少し頭を悩ませています。私は現在、ツイートを送信するだけのアプリを持っています。これを行うには、Twitter認証用のWebViewを起動する必要があります。これは、onNewIntent()に戻ります。
私がやろうとしているのは、サイトに接続している間/ AccessTokenの作業を実行している間、そしてツイートを送信している間に、単純なSpinnerProgressDialogをスローすることです。プログレスバーに新しいスレッドが必要になることを発見したばかりです。むしろ、ProgressDialogの使用を実行可能にするために、独自の別のスレッドで「時間のかかる作業」を行う必要があります。私の質問はこれです:認証コードがバックグラウンドで機能し、最終的にWebViewを開いて戻ってきて、最終的にonResume()ですべてを最初からやり直すときに、進行状況スピナーをフォアグラウンドに置くにはどうすればよいですか?
私はおそらく他のすべてを最も適切な方法で行っているわけではないと確信しています。私はAndroidは初めてですが、Javaは初めてです。手続き的に、create-およびdismissDialog(int)呼び出しをどこに配置するかを指定しました。現状では、それ以外はすべて正常に機能しますが、明らかに私のダイアログは表示できません。
基本的に、authorize()メソッドとtweet()メソッド全体を独自のAsyncTaskに入れる必要があると考えています。特にauthorize()(より具体的にはloginToTwitter())は、onNewIntent()に戻った後、ブラウザーから取得したデータを共有設定に保存する必要があるため、どうすればよいかわかりません。
洞察をありがとう、==マット
public class IntegrateTwitter extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
mPrefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
mTwitter = new TwitterFactory().getInstance();
mTwitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
if(authorize()) {
tweet();
returnToMM();
}
}
private boolean authorize() {
Log.i(LOG_TAG, "Authorizing...");
showDialog(PD_AUTHORIZING);
boolean result = false;
if(responseExistsAndValid()) {
saveResponseToAccessToken();
}
if(isAuthorized()) {
Log.i(LOG_TAG, "Prefs have AccessToken, grabbing it...");
if(getAccessTokenFromPrefs()) {
Toast.makeText(IntegrateTwitter.this, "Authorized.", Toast.LENGTH_SHORT).show();
result = true;
}
}
else {
Log.i(LOG_TAG, "Prefs don't have AccessToken.");
if(!responseStringExists()) {
Log.i(LOG_TAG, "No response exists either, starting Twitter login process...");
Toast.makeText(IntegrateTwitter.this, "Authorizing...", Toast.LENGTH_SHORT).show();
// Here is where it kicks out to the browser for authentication
loginToTwitter();
}
else {
Toast.makeText(IntegrateTwitter.this, "Authorization failed.", Toast.LENGTH_SHORT).show();
Log.i(LOG_TAG, "Response exists, so it must have failed once already, skipping Twitter login process.");
returnToMM();
}
}
deleteResponseFromPrefs();
dismissDialog(PD_AUTHORIZING);
return result;
}
private void tweet() {
showDialog(PD_TWEETING);
try {
Date testDate = new Date();
String testDateString = DateFormat.format("yyyy-MM-dd @ hh:mm:ss", testDate.getTime()).toString();
mTwitter.updateStatus(testDateString + " Test Tweet");
Toast.makeText(this, "Tweet successful!", Toast.LENGTH_SHORT).show();
}
catch (TwitterException e) {
Toast.makeText(this, "Tweet error.", Toast.LENGTH_SHORT).show();
Log.i(LOG_TAG, e.getMessage());
Log.i(LOG_TAG, Arrays.toString(e.getStackTrace()));
}
dismissDialog(PD_TWEETING);
}
// A bunch of support methods
// ...
}