2011-07-20 14 views
0

私はウェブサイトからドキュメントを読み込んでいます。テキスト文書に画像のURLが保持されます。非同期タスクのURL txt docから画像を読み込む方法は?

テキストドゥーメントから画像を読み込むために、メインUIをブロックする必要はありません。

私は、バックグラウンドなどでAsyncTaskにURLをロードしたいと思いますか? と入力し、画像のURLを変数に保存し、Lazy Downloaderに送信して作成します。

私は、ウェブサイトのテキストドキュメント(http://www.example.com/sites/images.txt)からイメージURLをロードする場所を実際に配置する方法の例を教えてください。ファイルからテキストをロードする方法を知っていますが、AsyncTaskでそれを行う方法はわかりません。

例をお待ちしております。

public void getImages() throws IOException{ 

    DefaultHttpClient httpclient = new DefaultHttpClient(); 

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt"); 
    HttpResponse response; 

     response = httpclient.execute(httppost); 


      HttpEntity ht = response.getEntity(); 

      BufferedHttpEntity buf = new BufferedHttpEntity(ht); 

      InputStream is = buf.getContent(); 


      BufferedReader r = new BufferedReader(new InputStreamReader(is)); 

      StringBuilder total = new StringBuilder(); 
      String line; 
      while ((line = r.readLine()) != null) { 
       total.append(line + "\n"); 

       imageUrl = total.toString(); 
      } 

      } 
      public void getImage2() throws IOException{ 

       DefaultHttpClient httpclient = new DefaultHttpClient(); 

       HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImage2.txt"); 
       HttpResponse response; 

        response = httpclient.execute(httppost); 


         HttpEntity ht = response.getEntity(); 

         BufferedHttpEntity buf = new BufferedHttpEntity(ht); 

         InputStream is = buf.getContent(); 


         BufferedReader r = new BufferedReader(new InputStreamReader(is)); 

         StringBuilder total = new StringBuilder(); 
         String line; 
         while ((line = r.readLine()) != null) { 
          total.append(line + "\n"); 

          imageUrl2 = total.toString(); 

         } 

} 
      public class ImageAdapter extends BaseAdapter { 
       /** The parent context */ 
       private Context myContext;public ImageAdapter() { 
        // TODO Auto-generated constructor stub 
       } 
       /** URL-Strings to some remote images. */ 

       private String[] myRemoteImages = {imageUrl,imageUrl2}; 






       /** Simple Constructor saving the 'parent' context. */ 
       public ImageAdapter(Context c) { this.myContext = c; } 

       /** Returns the amount of images we have defined. */ 
       public int getCount() { return this.myRemoteImages.length; } 

       /* Use the array-Positions as unique IDs */ 
       public Object getItem(int position) { return position; } 
       public long getItemId(int position) { return position; } 

       /** Returns a new ImageView to 
       * be displayed, depending on 
       * the position passed. */ 
       public View getView(int position, View convertView, ViewGroup parent) { 
       ImageView i = new ImageView(this.myContext); 

       try { 
           /* Open a new URL and get the InputStream to load data from it. */ 
           URL aURL = new URL(myRemoteImages[position]); 
           URLConnection conn = aURL.openConnection(); 
           conn.connect(); 
           InputStream is = conn.getInputStream(); 
           /* Buffered is always good for a performance plus. */ 
           BufferedInputStream bis = new BufferedInputStream(is); 
           /* Decode url-data to a bitmap. */ 
           Bitmap bm = BitmapFactory.decodeStream(bis); 
           bis.close(); 
           is.close(); 

           /* Apply the Bitmap to the ImageView that will be returned. */ 
           i.setImageBitmap(bm); 
         } catch (IOException e) { 

           Log.e("DEBUGTAG", "Remtoe Image Exception", e); 
         } 

       /* Image should be scaled as width/height are set. */ 
       i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       /* Set the Width/Height of the ImageView. */ 
       i.setLayoutParams(new Gallery.LayoutParams(150, 150)); 
       return i; 
       } 

       /** Returns the size (0.0f to 1.0f) of the views 
       * depending on the 'offset' to the center. */ 
       public float getScale(boolean focused, int offset) { 
       /* Formula: 1/(2^offset) */ 
       return Math.max(0, 1.0f/(float)Math.pow(2, Math.abs(offset))); 
       } 
       } 
      public class ImageAdapter2 extends BaseAdapter { 
       /** The parent context */ 
       private Context myContext;public ImageAdapter2() { 
        // TODO Auto-generated constructor stub 
       } 
       /** URL-Strings to some remote images. */ 

       private String[] myRemoteImages = {imageUrl2}; 






       /** Simple Constructor saving the 'parent' context. */ 
       public ImageAdapter2(Context c) { this.myContext = c; } 

       /** Returns the amount of images we have defined. */ 
       public int getCount() { return this.myRemoteImages.length; } 

       /* Use the array-Positions as unique IDs */ 
       public Object getItem(int position) { return position; } 
       public long getItemId(int position) { return position; } 

       /** Returns a new ImageView to 
       * be displayed, depending on 
       * the position passed. */ 
       public View getView(int position, View convertView, ViewGroup parent) { 
       ImageView i = new ImageView(this.myContext); 

       try { 
           /* Open a new URL and get the InputStream to load data from it. */ 
           URL aURL = new URL(myRemoteImages[position]); 
           URLConnection conn = aURL.openConnection(); 
           conn.connect(); 
           InputStream is = conn.getInputStream(); 
           /* Buffered is always good for a performance plus. */ 
           BufferedInputStream bis = new BufferedInputStream(is); 
           /* Decode url-data to a bitmap. */ 
           Bitmap bm = BitmapFactory.decodeStream(bis); 
           bis.close(); 
           is.close(); 

           /* Apply the Bitmap to the ImageView that will be returned. */ 
           i.setImageBitmap(bm); 
         } catch (IOException e) { 

           Log.e("DEBUGTAG", "Remtoe Image Exception", e); 
         } 

       /* Image should be scaled as width/height are set. */ 
       i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       /* Set the Width/Height of the ImageView. */ 
       i.setLayoutParams(new Gallery.LayoutParams(150, 150)); 
       return i; 
       } 

       /** Returns the size (0.0f to 1.0f) of the views 
       * depending on the 'offset' to the center. */ 
       public float getScale(boolean focused, int offset) { 
       /* Formula: 1/(2^offset) */ 
       return Math.max(0, 1.0f/(float)Math.pow(2, Math.abs(offset))); 




       } 
} 

}

答えて

1

あなたのAsyncTaskでonPreExecute()方法でtxtファイルのフェッチを行います。しかし、これを行う前に、進捗ダイアログを作成し、.setCancelable(false)に設定してください。 doInBackground()では、画像を取り込みます...そしてonPostExecute()では、画像の表示のようないくつかのUIを行います。

編集:

protected class Somename extends AsyncTask<String, String, String> 
    { 
     public Somename() 
     {   

     } 
     @Override 
     protected String doInBackground(String... arg0) { 

        // here you put the pure processings that DO NOT affect user-interface 
       getImages(); 
         getImage2(); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      ImageAdapter imgAdp = ImageAdapter(); //your constructor of the class that triggers updates on the UI 
      super.onPostExecute(result); 
     }  
    } 

あなたはAsyncTaskクラス内呼んあなたの方法で必要とされる右のコンテキストを、送信用心。 ImageAdapterクラスのコンストラクタを作成して、サイトからフェッチしたデータを継承します。

+1

画像はメインUIの画像ギャラリーです。問題は、画像が取得されるまでUIをブロックしていたことです。 – YogoTi

+0

フェッチは別のスレッドで行うこともできます。ただし、そのスレッドから表示しない限りです。あなたはUIに何も表示していませんが、処理しているからです。 –

+0

そして、私は理解していない、あなたはあなたがテキストファイルのimgsへのリンクを持っていると言いますか? –

関連する問題