私は私のアプリのためにサーバーからデータを取得しています。 "getData"関数は、アプリケーションのメインアクティビティ、スプラッシュスレッドに含まれています。私がいる問題はこれです:私はすぐにアプリをロードした後のニュースや説明を入力した場合スレッドをファイナライズする前にタスクが完了しているかどうかを確認する方法は?
、私は(保存するために必要な最後の2つのまたは3つの文字列がnullである)ではないすべての情報が読み込まれていることに注意してください。しかし、(スプラッシュスレッドを完了した後に)メインメニューを表示した後にアプリを数秒以上待っても、問題は発生せず、すべての情報が電話機に正しく保存されます。私はスプラッシュ画面を数秒遅らせることを試みましたが、それは実際にはエレガントな解決策でもなく、常に機能しません。
私の質問はどのように私はそれが「ついに」
が、私はちょうど別のクラスのパブリック静的文字列配列で、任意のデータをデータベースに格納しないよにジャンプする前に、関数が完了していることを確認することができますです。
あなたは以下の私のコードがあります:それは良いだろう
if(networkAvailable()){
Thread splashTread = new Thread() {
@Override
public void run() {
try {
getData.execute(description_Hyperlinks);
getNews.execute(new String[]{newsJSON_Hyperlink});
getOffers.execute(new String[]{offersJSON_Hyperlink});
for(int i = 0; i<3; i++)
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
finish();
startActivity(new Intent(FlexFormActivity.this, MainMenu.class));
stop();
}
}
};
splashTread.start();
あなたは[ 'AsyncTask'](http://developer.android.com/reference/android/os/AsyncTaskを使用する必要があります。html)を使用しています。タスクの作業が進むにつれて、特定のことを実行する可能性があります。 –
getData、getNewsおよびgetOffersは、AsyncTaskクラスのインスタンスです。 – Eugen
あなたはその概念を理解していません。作業をすべて行う単一の「AsyncTask」(例えば、「LoadContents」と呼ばれる)を作成する方がよいでしょう。このタスクでは、データ、ニュース、オファーをロードして表示することができます。タスクが終了すると、すべてがセットアップされ、ユーザーに表示されます。 Javaのexecutor-frameworkである 'Thread'を使用する必要はありません。Androidsの実装は、常にあなたのためにこれをまとめなければなりません。 –