2013-12-21 32 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

我已经这样做了,它的工作很好,它只是我的应用程序的起始页。我需要获得下载时间,然后等待那个时间。在此之后,意向应该开始=) –