【发布时间】:2014-03-24 02:14:53
【问题描述】:
我遇到了这个应用程序的问题,应该很容易解决,但我就是不知道我到底做错了什么......该应用程序所做的只是在一个线程中下载图像并设置另一个线程中的图像。我更改了 ReadFile 类以将 Drawable 对象返回到变量 finalImage 中,然后我有 onPostExecute 将该图像设置为 ImageView 但是......它唯一显示的是一个 Android 图标。任何建议,将不胜感激。我猜这与我从 ReadFile 类返回 Drawable 的方式有关,但我无法弄清楚究竟是什么。
package com.example.imageviewer;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.widget.ImageView;
public class MainActivity extends Activity {
private final String URL_STRING = "http://cdn.theatlantic.com/static/infocus/putin091311/s_p15_0RTXUL0R.jpg";
private final String FILENAME = "s_p15_0RTXUL0R.jpg";
private ImageView fileImageView;
public Drawable finalImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fileImageView = (ImageView) findViewById(R.id.fileImageView);
new DownloadFile().execute();
new ReadFile().execute();
}
class DownloadFile extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
// download and write the file
try{
// get the URL object
URL url = new URL(URL_STRING);
// get the input stream
InputStream in = url.openStream();
// get the output stream
FileOutputStream out =
openFileOutput(FILENAME, Context.MODE_PRIVATE);
// read input and write output
byte[] buffer = new byte[1024];
int bytesRead = in.read(buffer);
while (bytesRead != -1)
{
out.write(buffer, 0, bytesRead);
bytesRead = in.read(buffer);
}
out.close();
in.close();
// return a message
return "File downloaded";
}
catch (IOException e) {
return "Error: " + e.toString();
}
}
@Override
protected void onPostExecute(String message) {
Log.d("Test", message);
fileImageView.setImageDrawable(finalImage);
}
}
public class ReadFile extends AsyncTask <Void, Void, Drawable>{
@Override
protected Drawable doInBackground(Void...params){
try {
FileInputStream in = openFileInput(FILENAME);
Drawable image = Drawable.createFromStream(in, FILENAME);
fileImageView.setImageDrawable(image);
Log.d("Test", "File read");
}
catch (Exception e) {
Log.e("Test", "Error: " + e.toString());
}
return finalImage;
}
}
}
【问题讨论】:
标签: java android multithreading asynchronous drawable