2013-11-01 127 views
0

在我的應用程序中,我使用啓動畫面活動將dravables作爲文件保存在sd卡或內置內存中。它運作良好,但此活動不顯示內容視圖。爲什麼此活動保存文件但未顯示內容視圖?活動視圖不顯示

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash); 

    for (int i = 0; i < DRAWABLES.length; i++) { 
     saveDrawables(
       BitmapFactory.decodeResource(getResources(), DRAWABLES[i]), 
       String.valueOf(i + 2)); 
    } 

    startActivity(new Intent(SplashActivity.this, MotivateActivity.class)); 
    finish(); 

} 

public void saveDrawables(Bitmap drawable, String drawableName) { 

    try { 
     String filename = drawableName + ".jpg"; 
     Log.i("Local filename:", "" + filename); 

     File dir = new File(Environment.getExternalStorageDirectory() 
       + "/MotivateMe/"); 
     File file = new File(dir, filename); 

     if (!dir.exists()) { 
      dir.mkdirs(); 
     } 

     if (file.createNewFile()) { 
      file.createNewFile(); 
     } 

     FileOutputStream fileOutput = new FileOutputStream(file); 
     drawable.compress(Bitmap.CompressFormat.JPEG, 100, fileOutput); 
     fileOutput.close(); 
    } catch (Exception exception) { 

    } 

} 

}

+0

你爲什麼要在onCreate方法中重新開始活動? –

+0

問題:你的問題是什麼?你的代碼不清楚? – Subburaj

+0

「你爲什麼要在onCreate方法中重新開始活動?」 ,我開始另一項活動 –

回答

2

的代碼是在很多方面真的錯了......

但爲了簡單起見,我們只是說你正在做的工作(加載你的圖片)在錯誤的地方。

我建議你閱讀兩件事。

1)Activity Lifecycle

2)Asynctask(你應該在那裏做實際的工作)。

+1

謝謝,這是解決我的問題 –

-1

修改的onCreate代碼如下

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash); 
    final Handler handler=new Handler(); 
    new Thread(new Runnable() { 

     @Override 
     public void run() { 
      for (int i = 0; i < DRAWABLES.length; i++) { 
       saveDrawables(
         BitmapFactory.decodeResource(getResources(), DRAWABLES[i]), 
         String.valueOf(i + 2)); 
      } 
      handler.postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        startActivity(new Intent(SplashActivity.this, MotivateActivity.class)); 
         finish(); 
       } 
      },1000);     
     } 
    }).start(); 

} 

既然你正在做的UI線程操作,該線程將掛在那裏,你將不會看到啓動畫面。一旦線程完成,您將調用完成程序,因此您再也看不到啓動畫面。在上面的代碼中,我創建了一個新線程來完成這個任務,意味着這個活動將會正常加載。希望這能解決你的問題。

+0

雖然這可能「解決」了這個問題,但在onCreate方法中啓動線程的做法剛殺死了100只小貓。這是壞壞壞壞。不要這樣做。 –

+0

我喜歡加入1000毫秒的延遲,以延遲... –

+0

這種方法不起作用 –

0

它不顯示您保存的文件,因爲在您的onCreate()方法中活動呈現佈局之後,您已開始另一個活動。這就是爲什麼只運行保存圖像的代碼,然後立即啓動新的活動。