2011-07-21 17 views
0

我有4種方法檢索URL,然後Imageloader加載圖像。如何創建變量如此活動知道圖像是否被提取?

圖像設置在圖庫視圖中。

問題出現在較小的屏幕上,當圖像不在視圖中時,用戶將其重新裝入視圖時會重新加載它們。

我該如何去創建一個測試的東西,並在圖像不在圖像時停止重新加載圖像?

這是加載圖像的代碼..完整的類。

if(Build.VERSION.SDK_INT >= 11){ 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
    } 


    myGames.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startActivity(n); 

     } 
    }); 
    gameNews.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

     } 
    }); 

    //Executing AsyncTask in background thread to get game images. 
    MyTask myTask = new MyTask(); 

    myTask.execute(); 

} 
//Method to get images from text documents that will by updated every month. 


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(); 
       Log.v("getImage1", "Retreived image"); 
      } 
    } 



      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(); 
          Log.v("getImage2", "Retreived image"); 
         } 
       } 



         public void getImage3() throws IOException{ 

          DefaultHttpClient httpclient = new DefaultHttpClient(); 

          HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webimage3.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"); 

             imageUrl3 = total.toString(); 
             Log.v("getImage3", "Retreived image"); 
            } 

         } 

         public void getImage4() throws IOException{ 

          DefaultHttpClient httpclient = new DefaultHttpClient(); 

          HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImage4.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"); 

             imageUrl4 = total.toString(); 


          } 
} 

         //ImageAdapter that gets the URL of the images and put them in a format to be set to gallery 
      public class ImageAdapter extends BaseAdapter { 
       /** The parent context */ 
       private Context myContext;public ImageAdapter() { 
        // TODO Auto-generated constructor stub 
       } 
       /** URL-Strings to some remote images. */ 

       public String[] myRemoteImages = {imageUrl,imageUrl2,imageUrl3,imageUrl4}; 






       /** 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 { 

           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(); 
           Log.v(imageUrl, "Retrieving image"); 

           /* 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))); 
       } 
       } 





      //the important AsyncTask method. running the background thread to get the images and set them to the gallery. 
       private class MyTask extends AsyncTask<Void, Void, Void>{ 


       @Override 
       protected Void doInBackground(Void... arg0) {try { 
          getImages(); 
          Log.v("MyTask", "Image 1 retreived"); 
          getImage2(); 
          Log.v("MyTask", "Image 2 retreived"); 
          getImage3(); 
          Log.v("MyTask", "Image 3 retreived"); 
          getImage4(); 
          Log.v("MyTask", "Image 4 retreived"); 
         } catch (IOException e) { 
          Log.e("MainMenu retreive image", "Image Retreival failed"); 
          e.printStackTrace(); 
         } 
        return null; 
       } 
       @Override 

       protected void onPostExecute(Void notUsed){ 
        ((Gallery) findViewById(R.id.gallery)) 
          .setAdapter(new ImageAdapter(MainMenu.this)); 


       } 

         } 

}

回答

0

嘗試保存這些獲取的圖像到緩存中,然後爲每個圖像檢查,如果圖像中已經存在於緩存,使其不必再下載。

+0

你能指導我緩存圖像的方向嗎? – YogoTi

+0

有誰知道我可以如何完成csching的形象,與上面的代碼? – YogoTi

+0

http://developer.android.com/reference/android/content/Context.html#getCacheDir() –

相關問題