2011-01-12 4 views
0
public Object fetch(String address) throws MalformedURLException, 
IOException { 
    URL url = new URL(address); 
    Object content = url.getContent(); 
    return content; 
} 

private Drawable ImageOperations(Context ctx, String url) { 
    try { 
     InputStream is = (InputStream) this.fetch(url); 
     Drawable d = Drawable.createFromStream(is, "src"); 
     return d; 
    } catch (MalformedURLException e) { 
     return null; 
    } catch (IOException e) { 
     return null; 
    } 
    catch (Exception e) 
    { 
     return null; 
    } 
} 

try { 
      Drawable a =ImageOperations(this,"url"); imgView.setImageDrawable(a); 
     } catch (Exception e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 

これはうまくいきますが、「SocketException:Adressファミリがプロトコルでサポートされていないため」というアプリケーションがフリーズしています。これを修正する方法はありますか?問題を読み込んでいます

ので、洗面所独立スレッドまたはAsyncTaskを使用して、あなたのUIがフリーズしないこと(あなたのUIフリーズが理由です)おかげ

答えて

0

あなたはUIスレッドからファイルをダウンロードしようとしています...。

これは問題を解決するはずです。

+0

私はこのスレッドで最初の答えを試みました:http://stackoverflow.com/questions/3090650/android-loading-an-image-from-the-web-with-asynctask "DownloadImageTask" 「新しいDownloadImageTask.execute(mChart);」の部分クラスが作成されていても、eclipseで赤色になります。私は何か見落としてますか? – Johan

+0

ああ、心配しないで、クラスの後に "()"を逃した。 – Johan

0

st0leは、あなたがUIスレッドから重荷を尽くそうとしていることを指摘しています。

Androidのすべてのヘビーデューティなものは、別のworker threadで行う必要があります。 main thread(またはUIスレッド)で実行すると、アプリケーションが応答しなくなる可能性があり、システムがハングアップしたと思うように説得されると、殺される可能性があります。

したがって、別のスレッドで長時間実行する操作を実行する必要があります。これを実装するには、Handlersという概念を使用できます。