ソリューション:ProgressDialog ActiviyのonCreate()中に問題:Androidの中のボイド
さて、私が見つけた私たちがHandler
を使用する必要があなたの答えからソリューションあなたの答えは完全に
最初に働いていないので、 Runnable
をメイン/ UIスレッドに投稿してUpdateDisplay()
を実行しますが、重要なものではない他のスレッドではなく、UIThreadの下にProgressDialog
を定義してください。ここ
は、最終的なコードである:
public final String RSSFEEDOFCHOICE = "http://www.deals2buy.com/rssgen/tech.xml";
public final String tag = "RSSReader";
private RSSFeed feed = null;
private Handler handler = new Handler();
private ProgressDialog dialog;
/** Called when the activity is first created. */
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
dialog = ProgressDialog.show(RSSReader.this, "Loading",
"Loading, please wait..");
Thread t = new Thread() {
public void run() {
feed = getFeed(RSSFEEDOFCHOICE);
handler.post(new Runnable() {
public void run() {
dialog.dismiss();
UpdateDisplay();
};
});
}
};
t.start();
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~
問題:
ときAndroidアプリケーション最初のロード、これは何が起こるかです:のURLからRSSコンテンツを取得
getFeed(String url)
経由でRSSFeed feed
インスタンス変数に解析します。UpdateDisplay()
メソッド経由でListViewのユーザーにこれらのフィードを表示します。これらが起こっている
は、私のようなコンテンツをretrivingしているシステムについてのそれらを知らせるためにユーザーにProgressDialogを見せたかったgetFeed(String Url):RSSFeed
が完了したら、ProgressDialogが却下される「ロード、...お待ちください」とUpdateDisplay():void
は次のようになります呼び出される。
これが私の最初の試みである:
public final String RSSFEEDOFCHOICE = "somewhere.xml"; //coming from http
public final String tag = "RSSReader";
private RSSFeed feed = null;
/** Called when the activity is first created. */
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
ProgressDialog dialog = ProgressDialog.show(RSSReader.this, "Loading...", "Loading, please wait");
feed = getFeed(RSSFEEDOFCHOICE);
dialog.dismiss();
UpdateDisplay();
}
そして、それは私が望むように動作しませんでしたので、それがProgressDialog
は表示されません。 ProgressDialogが進行中であることが原因であると考えて以来、別のThread
で処理する必要があります。ここで
は私の第二の試みである:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Thread t = new Thread()
{
public void run()
{
ProgressDialog dialog = ProgressDialog.show(RSSReader.this, "Loading...", "Loading, please wait");
feed = getFeed(RSSFEEDOFCHOICE);
dialog.dismiss();
}
};
UpdateDisplay();
}
このメソッドは、メインスレッドによって処理されていましたので、それはUpdateDisplay()
まで大丈夫だったと私は多分私はt
の下にそれを入れている必要があると思ったので、それが何かを待っていませんでしたスレッドdialog.dismiss()
の後にスレッド。
は、だから私はこのでした:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Thread t = new Thread()
{
public void run()
{
ProgressDialog dialog = ProgressDialog.show(RSSReader.this, "Loading...", "Loading, please wait");
feed = getFeed(RSSFEEDOFCHOICE);
dialog.dismiss();
UpdateDisplay();
}
};
}
をしかし、その後、デバッガは、実行時に言った:onCreate():void
を扱うのみメインスレッドが届くと、それはそれらを作成するため、ビューはオブジェクトを使用することができます。
今、私はとてもうんざりしていて、プログラミングをやめるように感じています。
いくつかのいずれかが私を助けることができる:/
感謝を事前に。
私はそれを試してみたが、問題は、コードが 'UpdateDisplay'に当たったとき、それは私が私のポストの下部に言及したエラーをスローしました。 – Tarik