2013-05-06 2 views
0

Я хочу просочиться между заставкой экрана, показанной сначала с asynchtask в моем приложении, я начинаю с всплеска 5 секунд, затем asynchtask, я хочу, чтобы, когда я запускал свой всплеск, асинхронная загрузка начала, это мой всплеск код:Asynchtask with splashScreen

public class SplashActivity extends Activity { 

    private static String Spsc = SplashActivity.class.getName(); 
    private static long time = 5; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // Removes notification bar 
     setContentView(R.layout.splash); 
     IntentLauncher launcher = new IntentLauncher(); 
     launcher.start(); 
    } 
    private class IntentLauncher extends Thread { 
     @Override 
     public void run() { 
      try { 
       Thread.sleep(time*1000); 
      } catch (Exception e) { 
       Log.e(Spsc, e.getMessage()); 
      } 
      Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
      SplashActivity.this.startActivity(intent); 
      SplashActivity.this.finish(); 
     } 
    } 
} 

и это мой всплеск от mainActivity:

class FetchPosts extends AsyncTask<Void, Void, Void> { 
     private ProgressDialog progressDialog; 
     @Override 
     protected void onPreExecute() {   
      super.onPreExecute(); 
      progressDialog = ProgressDialog.show(MainActivity.this, "", getString(R.string.loading_message)); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      articles = Services.getPosts(MainActivity.this); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      progressDialog.dismiss(); 

     } 
    } 
+1

Что ваш вопрос? Что/не работает? – codeMagic

+0

Это 2 действия, и я хочу, чтобы между ними отображался всплеск и в то же время данные загрузки асинхронной загрузки. – Sherlock

+0

Это я понимаю. Что я спрашиваю, что происходит/не происходит сейчас, когда вы запускаете его? Мы знаем, чего вы хотите. То, что мы не знаем, это то, что не работает. Кроме того, возможно, вы хотите поместить свой 'AsyncTask' в качестве внутреннего класса вашей« MainActivity », если он еще не выполнен или хотя бы выполнит его из« MainActivity » – codeMagic

ответ

0

Просто

public class SplashActivity extends Activity { 

private static String Spsc = SplashActivity.class.getName(); 
private static long time = 5; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // Removes notification bar 
    setContentView(R.layout.splash); 
    IntentLauncher launcher = new IntentLauncher(); 
    launcher.start(); 
} 
private class IntentLauncher extends Thread { 
    @Override 
    public void run() { 
     try { 
      Thread.sleep(time*1000); 
     } catch (Exception e) { 
      Log.e(Spsc, e.getMessage()); 
     } 
     //Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
     //SplashActivity.this.startActivity(intent); 
     //SplashActivity.this.finish(); 
      new FetchPosts().execute(); 
    } 
    } 
public class FetchPosts extends AsyncTask<Void, Void, Void> { 
    private ProgressDialog progressDialog; 
    @Override 
    protected void onPreExecute() {   
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(MainActivity.this, "", getString(R.string.loading_message)); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     articles = Services.getPosts(MainActivity.this); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     progressDialog.dismiss(); 

    } 
} 
} 
+0

, если я буду использовать класс на mainActivity или что? это разногласие между двумя видами деятельности? – Sherlock

+0

, если вы вызываете 'MainActivity.java' только для выполнения' AsyncTask', чем теперь вы этого не делаете, этот класс вызывает 'new FetchPosts(). Execute();' this будет 'AsyncTask' –

+0

ok спасибо, я попробую с это – Sherlock

0

попробуйте следующий код будет начать AsyncTask когда SplashScreen acctivity запускается

public class SplashActivity extends Activity { 

private static String Spsc = SplashActivity.class.getName(); 
private static long time = 5; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // Removes notification bar 
    setContentView(R.layout.splash); 
    FetchPosts obj=new FetchPosts(); 
    obj.execute("dummystring"); 
} 
} 

class FetchPosts extends AsyncTask<String, Void, String> { 
    private ProgressDialog progressDialog; 
    @Override 
    protected void onPreExecute() {   
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(MainActivity.this, "", getString(R.string.loading_message)); 
    } 

    @Override 
    protected Void doInBackground(String... params) { 
     articles = Services.getPosts(MainActivity.this); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     progressDialog.dismiss(); 

    } 
} 
+0

, когда я добавляю этот класс в действия, он совершает много ошибок. – Sherlock

+0

@Kira. Какая ошибка? – sam

+0

@Kira заменить первую и третью пустоту на String после AsyncTask <>, а также сделать параметр doInBackground (String ... params) – sam