2013-12-21 39 views
0

我一直在搜索整個互聯網,以解決這個問題在我的應用程序,但沒有什麼真的似乎爲我工作。安卓替代睡眠後啓動Intent方法

我有一個起始頁面,它處理我的Json-Data的下載,3秒鐘後,一個Intent啓動並將我重定向到應用程序。這工作正常,如果我有更快的互聯網連接。如果Internet連接速度較慢,以在3秒內加載所有數據,則會拋出異常。

所以我的問題是,如何獲得下載過程的實時?

我應該處理這個,2線程?

謝謝! =)

代碼如下:

public class StartLogoPage extends Activity { 

boolean haveConnectedWifi = false; 
boolean haveConnectedMobile = false; 
private Thread timer; 
private Thread intentThread; 
private Thread timerNoInternet; 
private boolean serverResponse = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_startlogopage); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    // startIntent(); 
    haveNetworkConnection(); 
    Dashboard ds = new Dashboard(); 

    if (haveConnectedWifi == true || haveConnectedMobile == true) { 

     Toast.makeText(this, "Loading data from Internet", 
       Toast.LENGTH_LONG).show(); 

     timer = new Thread() { 
      public void run() { 

       try { 
        System.out.println("timer Thread started."); 
        // start timer 
        UrlHandler urlHandler = new UrlHandler(); 
        urlHandler.handleEvents(1); 
        urlHandler.handleNews(1); 
        urlHandler.handlePerson(1); 
        urlHandler.handleWebIndex(1); 
        urlHandler.handleNavigation(1); 

        sleep(3000); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 

        Intent openDashboard = new Intent(
          "com.example.incomingandroid.DASHBOARD"); 
        System.out.println("openDashboard" + openDashboard); 
        // openDashboard.clone(); 
        // if (openDashboard != null) 
        startActivity(openDashboard); 

       } 

      } 

     }; 
     timer.start(); 



    } else { 

     Toast.makeText(
       this, 
       "No Internet Connection was found. This Application needs Internet to be started.", 
       Toast.LENGTH_LONG).show(); 

     timerNoInternet = new Thread() { 
      public void run() { 
       try { 
        sleep(6000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } finally { 
        finish(); 
       } 
      } 
     }; 
     timerNoInternet.start(); 
    } 

} 

private boolean haveNetworkConnection() { 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) { 
     if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
      if (ni.isConnected()) 
       haveConnectedWifi = true; 

     if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
      if (ni.isConnected()) 
       haveConnectedMobile = true; 

    } 
    return haveConnectedWifi || haveConnectedMobile; 
} 
+0

可以使用處理器 – Raghunandan

+0

ü可以specificate你的答案嗎? =) –

回答

0

可以3秒鐘的延遲,你可以使用Handler後使用Handler

Handler h = new Handler(); 

    Runnable r = new Runnable(){ 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 

     } 

    }; 
    h.postDelayed(r, 30000);//delay 3 seconds 

如果你想要的東西。

編輯:

你可以使用一個AsyncTask做你的下載那裏,然後在onPostExecute啓動活動。在doInbackground計算完成後執行onPostExecute

http://developer.android.com/reference/android/os/AsyncTask.html

+0

感謝您的回答,但我需要一個解決方案,不會延遲手動設置時間的時間(如3秒鐘)。我需要等待,只要JSON數據已被加載。 –

+0

@ charly_freak35使用Asynctask – Raghunandan

+0

我已經這樣做了,它的工作很好,它只是我的應用程序的起始頁。我需要獲得下載時間,然後等待那個時間。在此之後,意向應該開始=) –