0

我想从服务器下载图像,将其保存在 SD 卡上,然后显示。我编写了该代码,但它不起作用 - 没有错误,但我只看到黑屏而不是图像。

public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    MyTask mt = new MyTask();
    mt.execute();

    Intent intent = new Intent();  
    intent.setAction(android.content.Intent.ACTION_VIEW);  
    File file = new File("/sdcard/askeroid/logos/1_mobile.png");  
    intent.setDataAndType(Uri.fromFile(file), "image/*");  
    startActivity(intent); 
}  

}
类 MyTask 扩展 AsyncTask {

@Override
protected Void doInBackground(Void... params) {
    try{
        URL url = new URL("http://ed.sadko.mobi/logo/logo_1mobile.png");
        URLConnection connection = url.openConnection();
        connection.connect();

        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new FileOutputStream("/sdcard/askeroid/logos/1_mobile.png");

        output.flush();
        output.close();
        input.close();

    } catch(Exception e){e.printStackTrace();}
  return null;
}

}

4

2 回答 2

1

在移动到下一个活动之前,您无需等待下载结束。

我建议您使用AsyncTask- 使用 in 下载图像doInBackground并开始下一个活动onPostExecute

就像是:

AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
    @Override protected Long doInBackground(Void ... urls) {
        // download the image
    }

    @Override protected void onPostExecute(Void result) {
        // start new activity...
    }
};
task.execute();

另外,请注意,不同设备的 SD 卡路径可能会有所不同。在此处查看以了解如何正确访问它。

于 2012-10-10T21:39:02.253 回答
1

+1 使用 AsyncTask 的答案,它使 android 上的线程超级容易。另一个问题是你打开了InputStreamand theOutputStream但你实际上从未从输入中读取任何内容,也没有向输出中写入任何内容,因此 sdcard 上的文件将是空的。

于 2012-10-10T21:45:53.427 回答