2012-01-19 34 views
2

私は、スプラッシュ画面を表示する必要があり、同時にサーバー通信が必要なアプリケーションをAndroidで開発しています。ここでの問題は、私がアプリケーションを起動し、最初のアプリケーションがサーバーと通信しているときに、スプラッシュ画面が表示されていることです。私は同時にサーバ通信とスプラッシュ画面の両方にしたい。 Androidのスプラッシュ画面とサーバーの通信

は私のコードです:それは「SplashActivity」から始める方がよいでしょう。この目的のため

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.splash_screen); 

    try { 

     Thread thread = new Thread(this); 

     thread.start(); 

     thread.join(); 

     //Attractions 
     CommonMethods.getSystemOutput("Response Json Array String Attractions:::"+jArrayMobileAttractions); 

     attractionsDate = JsonParsing.getLatestDate(jArrayMobileAttractions); 

     attractionsDate = getDate(attractionsDate); 

     CommonMethods.getSystemOutput("Attractions Date:::::"+attractionsDate); 

     //Categories 
     CommonMethods.getSystemOutput("Response Json Array String Categories:::"+jArrayCategories); 

     categoryDate = JsonParsing.getLatestDate(jArrayCategories); 

     categoryDate = getDate(categoryDate); 

     CommonMethods.getSystemOutput("Category date:::"+categoryDate); 

     //Contacts 
     CommonMethods.getSystemOutput("Response Json Array String Contacts:::"+jArrayContacts); 

     contactsDate = JsonParsing.getLatestDate(jArrayContacts); 

     contactsDate = getDate(contactsDate); 

     CommonMethods.getSystemOutput("Contacts Date:::"+contactsDate); 

    } catch (Exception e) { 

     CommonMethods.getSystemOutput("Exception in Splash screen thread:::"+e); 
    } 

} 

public void run() { 

//  if (attractionsDate == null) { 

     jArrayMobileAttractions = RequestHandler.getJSONfromURL(Constants.MOBILE_ATTRACTIONS_URL); 

     jArrayCategories = RequestHandler.getJSONfromURL(Constants.CATEGORY_URL); 

     jArrayContacts = RequestHandler.getJSONfromURL(Constants.CONTACTS_URL); 


//  } else { 

//   jArrayMobileAttractions = RequestHandler.getJSONfromURL(Constants.MOBILE_ATTRACTIONS_URL+"?lastupdateddate="+attractionsDate); 

//  } 

} 

答えて

3

あなたはそれは私が行うには同じことを持っていたし、私はそれをこのように行なったし、それだけで正常に動作方法

private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 
     // Do Server Interaction Here 
     return response; 
    } 


@Override 
    protected void onPreExecute(String result) { 
     //Show your Splash Screen 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     //Gone the Splash Screen view 
    } 
} 
+0

おかげトンメイト!!!!私は非同期タスクを使用し、私が望むものを達成することができました! – krisDrOid

0

からonCreate()にサーバーと通信するための新しいThreadを開始し、すべての通信が終了したときに - startActivityForResult(mainActivityIntent)を呼び出します。正しい動作のために戻るボタンは、メインアクティビティの終了時にスプラッシュアクティビティを終了します。おおよそコード:

public class SplashActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setup view for activity 
     new Thread(new Runnable() { 
      public void run() { 
       // do here some long operation 

       startActivityForResult(new Intent(SplashActivity.this, MainActivity.class), 0); 
      } 
     }).start(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     finish(); 
    } 
} 
0

を持っているAsynchTask Managerを使用することができます。私はスプラッシュスクリーンを表示し、サーバーからファイルをダウンロードし、解凍して、適切なディレクトリにファイルを移動してから、アプリケーションのメイン画面を起動しなければなりませんでした。ここでコードは、私はAsyncTaskを使用します。

したがって、3つのAsyncTaskクラスが各タスクに1つあり、onPostExecute()で次のAsyncTaskを呼び出します。これが最善の方法だとは言えませんが、それは私のために働きます。

私は不必要なコードを削除しましたが、わかりやすくするために、私はダイアログを呼び出してユーザーにダウンロードを進めたいと思いました。また、FIRST_RUNが真であるかどうかをチェックするので、パッケージをダウンロードする必要があるかどうかを確認する必要があります。初めてアプリケーションを実行する必要があるため、spashscreenアクティビティを実行し、falseであればMAINAPPアクティビティ。

希望します。

public class SplashScreen extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splashscreen); 

    SharedPreferences settings = getSharedPreferences(PREFS_NAME,0); 
    boolean firstRun = settings.getBoolean("FIRST_RUN", true); 
    if (firstRun) { 
     showDialog(INITIAL_DLG); 
    } else { 
     startActivity(new Intent(appContext, MAINAPP.class)); 
    } 
} 

/*** 
* First entry after YES on Dialog! 
*/ 
protected void initialize() { 
    messageTV.setVisibility(TextView.VISIBLE); 
    progressBar.setVisibility(ProgressBar.VISIBLE); 
    downloadThread = new DownloadFiles(); 
    downloadThread.execute(); 
} 

protected void rollback() { 

} 

@Override 
protected Dialog onCreateDialog(int id) { 
    AlertDialog.Builder builder; 
    switch (id) { 
    case INITIAL_DLG: 
     builder = new AlertDialog.Builder(this); 
     builder.setMessage(R.string.app_setup) 
     .setCancelable(false) 
     .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
       initialize(); 
      } 
     }) 
     .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       finish(); 
      } 
     }); 
     alertDlg = builder.create(); 
     return alertDlg; 
    default: 
     return null;  
    } 
} 

protected class DownloadFiles extends AsyncTask<String, Integer, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 
     try { 
      //file download 
     } catch (Exception e) { 
      result = false; 
     } 
     return true; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     progressBar.setProgress(values[0]); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     unzipThread = new DecompressZipFile(); 
     unzipThread.execute(); 
    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     messageTV.setText("Step 1/4:Downloading data..."); 
     progressBar.setProgress(0); 
     progressBar.setMax(100); 
     super.onPreExecute(); 
    } 
} 

protected class DecompressZipFile extends AsyncTask<String, Integer, Boolean> { 
    @Override 
    protected Boolean doInBackground(String... params) { 
     try { 
      //unzip files 
      return true;  
     } catch(Exception e) { 
      return false; 
     } 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     if (values[0]<0) progressBar.setMax(values[0]*-1); 
     else progressBar.setProgress(values[0]); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     moveDBThread = new MoveDBFile(); 
     moveDBThread.execute(); 
    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     messageTV.setText("Step 2/4:Decompressing data..."); 
     progressBar.setProgress(0); 
     progressBar.setMax(100); 
     super.onPreExecute(); 
    } 
} 

protected class MoveDBFile extends AsyncTask<String, Integer, Boolean> { 
    @Override 
    protected Boolean doInBackground(String... params) { 
     try { 
      //moving files 
      return true; 
     } catch (Exception e) { 
      globalE = e; 
      finish(); 
      return false; 
     } 
    } 

    @Override 
    protected void onPreExecute() { 
     messageTV.setText("Step 3/4:Shufflin'..."); 
     progressBar.setProgress(0); 
     progressBar.setMax(100); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     progressBar.setProgress(values[0]); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     super.onPostExecute(result); 
     if (result) { 
      getSharedPreferences(PREFS_NAME,0).edit().putBoolean("FIRST_RUN", false).commit(); 
      startActivity(new Intent(appContext, MAINAPP.class)); 
     } else { 
      rollback(); 
     } 
    } 
} 

}