2013-11-01 125 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()方法中活动呈现布局之后,您已开始另一个活动。这就是为什么只运行保存图像的代码,然后立即启动新的活动。