【问题标题】:Android downloading image安卓下载图片
【发布时间】:2014-01-24 18:15:11
【问题描述】:

我正在尝试从网络服务器连续下载图像。下面是代码

public class HMIActivity extends Activity implements Observer{

private ImageView imageView;

public HMIActivity()
{

}

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

@Override
protected void onStart()
{
    super.onStart();
    ImageDownloader imageDownloader = new ImageDownloader("http://192.168.5.109/hmi/img.jpg",this);
    Thread thread = new Thread(imageDownloader);
    thread.start();

     imageView = (ImageView) findViewById(R.id.imageView1);

}
    public void update(Observable obj,Object data)
{
    HTTPCommunicator httpCommunicator = (HTTPCommunicator)data;
          System.out.println("length----"+httpCommunicator.bytes.length);

}

图片下载类的代码

public class ImageDownloader implements Runnable{

private final String urlToDownloadImage;
private HMIActivity hmiActivity;
private int NTHREADS = 10;
ExecutorService executor = Executors.newFixedThreadPool(NTHREADS);

  public ImageDownloader(String url,HMIActivity _hmiActivty)
  {
    this.urlToDownloadImage = url;
    hmiActivity = _hmiActivty;
}

@Override
public void run(){

        while(true){
            HTTPCommunicator httpCommunicator = new HTTPCommunicator(this.urlToDownloadImage);
            httpCommunicator.addObserver(this.hmiActivity);
            executor.execute(httpCommunicator);
        }
    }
}

htppcommunicator 类的代码

public class HTTPCommunicator extends Observable implements Runnable {

String urlToDownloadImage;
private final int HTTP_CONNECTION_TIMEOUT = 10*1000;
public byte bytes[];

public HTTPCommunicator(String urlToDownloadImage)
{
    this.urlToDownloadImage = urlToDownloadImage;
}

@Override
public void run() {
    // TODO Auto-generated method stub

    try
        {
            URL url = new URL(urlToDownloadImage);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setConnectTimeout(HTTP_CONNECTION_TIMEOUT);
            urlConnection.connect();
            InputStream inputStream = urlConnection.getInputStream();
            if(inputStream != null)
            {
                bytes = IOUtils.toByteArray(inputStream);

                setChanged();
                notifyObservers(this);
            }
        }
        catch(MalformedURLException _exception)
        {   
            Log.e("HTTPCommunicator","Malformed url exception");
        }
        catch(UnknownHostException _exception)
        {
            Log.e("HTTPCommunicator","Check Internet Connection!!!");
        }
    }
  }

这段代码只运行了 1 分钟,然后它抛出下面显示的异常

01-24 12:50:15.379: E/AndroidRuntime(912): FATAL EXCEPTION: pool-1-thread-7
01-24 12:50:15.379: E/AndroidRuntime(912): java.lang.OutOfMemoryError

我不确定如何解决此问题。请帮帮我。

【问题讨论】:

  • 你最终用bytes做什么?

标签: java android httpurlconnection imagedownload


【解决方案1】:

与其手动下载图片,不如尝试延迟加载图片。 对于延迟加载,您在 android 中有很多选项

1。 UIL

2Android Smart Image View

这样你就不会出现内存不足异常..

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2013-03-09
    • 2012-04-19
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多