Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > Mobile > Mobile Forum > [Android] Image ภาพโหลดจาก URL ขึ้นบ้างไม่ขึ้นบ้าง ทำอย่างไรดีค่ะ



 

[Android] Image ภาพโหลดจาก URL ขึ้นบ้างไม่ขึ้นบ้าง ทำอย่างไรดีค่ะ

 



Topic : 098175



โพสกระทู้ ( 37 )
บทความ ( 0 )



สถานะออฟไลน์




คือว่าภาพมันขึ้นไม่ครบอะค่ะ พยายามแก้แล้วก็ขึ้นไม่ครบอยู่ดี

1
พอกดแล้วภาพถึงจะขึ้นอะค่ะ
2

แต่ก็มีที่กดแล้วไม่ขึ้นเหมือนกัน

3
เดือนกันยายนวันที่ 29 จะไม่ขึ้นเลยคะ

4
และเดือนธันวาคมวันที่ 24-25 จะไม่ขึ้นเลยคะ

ลองแก้ดาต้าเบสแล้วถึงแค่ 20 ธ.ค. ก็จะเลื่อนมาเป็น 19-20 ไม่ขึ้นแทนอะค่ะ แต่กดแล้วก็มีข้อมูลนะคะแต่ภาพไม่ขึ้น TT


Code (Android-Java)
public class ImageLoader2 {
    
    MemoryCache memoryCache=new MemoryCache();
    FileCache fileCache;
    private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
    ExecutorService executorService; 
    
    public ImageLoader2(Context context){
        fileCache=new FileCache(context);
        executorService=Executors.newFixedThreadPool(5);
    }
    
    final int stub_id=R.drawable.loadphoto;
    public void DisplayImage(String url, ImageView imageView)
    {
    	int t=0;
      do{  imageViews.put(imageView, url);
        Bitmap bitmap=memoryCache.get(url);
        if(bitmap!=null)
            {imageView.setImageBitmap(getResizedBitmap(bitmap,70,70));
            t=100;
            }
       
        else
        {
            queuePhoto(url, imageView);
            imageView.setImageResource(stub_id);
          //  imageView.setImageBitmap(bitmap);
           // Log.d("Else 1 : ",url);
           t+=1;
        }
      }while(t!=100);
    }
      private Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // CREATE A MATRIX FOR THE MANIPULATION
        Matrix matrix = new Matrix();
        // RESIZE THE BIT MAP
        matrix.postScale(scaleWidth, scaleHeight);

        // "RECREATE" THE NEW BITMAP
        Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
        return resizedBitmap;
    }


    private void queuePhoto(String url, ImageView imageView)
    {
        PhotoToLoad p=new PhotoToLoad(url, imageView);
        executorService.submit(new PhotosLoader(p));
    }
    
    private Bitmap getBitmap(String url) 
    {
        File f=fileCache.getFile(url);
        
        //from SD cache
        Bitmap b = decodeFile(f);
        if(b!=null)
            return b;
        
        //from web
        try {
            Bitmap bitmap=null;
            URL imageUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
            
            conn.setConnectTimeout(500000);
            conn.setReadTimeout(200000);
            conn.setInstanceFollowRedirects(true);
            InputStream is=conn.getInputStream();
            OutputStream os = new FileOutputStream(f);
            Utils.CopyStream(is, os);
            os.close();
            bitmap = decodeFile(f);
            return bitmap;
        } catch (Throwable ex){
           ex.printStackTrace();
           if(ex instanceof OutOfMemoryError)
               memoryCache.clear();
           return null;
        }
    }

    //decodes image and scales it to reduce memory consumption
    private Bitmap decodeFile(File f){
        try {
            //decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f),null,o);
            
            //Find the correct scale value. It should be the power of 2.
            final int REQUIRED_SIZE=200;
            int width_tmp=o.outWidth, height_tmp=o.outHeight;
            int scale=1;
            while(true){
                if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                    break;
                width_tmp/=2;
                height_tmp/=2;
                scale*=2;
            }
           
            //decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize=scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {}
        return null;
    }
    
    //Task for the queue
    private class PhotoToLoad
    {
        public String url;
        public ImageView imageView;
        public PhotoToLoad(String u, ImageView i){
            url=u; 
            imageView=i;
        }
    }
    
    class PhotosLoader implements Runnable {
        PhotoToLoad photoToLoad;
        PhotosLoader(PhotoToLoad photoToLoad){
            this.photoToLoad=photoToLoad;
        }
        
        @Override
        public void run() {
            if(imageViewReused(photoToLoad))
                return;
            Bitmap bmp=getBitmap(photoToLoad.url);
            memoryCache.put(photoToLoad.url, bmp);
            if(imageViewReused(photoToLoad))
                return;
            BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad);
            Activity a=(Activity)photoToLoad.imageView.getContext();
            a.runOnUiThread(bd);
        }
    }
    
    boolean imageViewReused(PhotoToLoad photoToLoad){
        String tag=imageViews.get(photoToLoad.imageView);
        if(tag==null || !tag.equals(photoToLoad.url))
            return true;
        return false;
    }
    
    //Used to display bitmap in the UI thread
    class BitmapDisplayer implements Runnable
    {
        Bitmap bitmap=null;
        PhotoToLoad photoToLoad;
        public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
        public void run()
        {
            if(imageViewReused(photoToLoad))
                return;
            if(bitmap!=null)
                photoToLoad.imageView.setImageBitmap(bitmap);
            else
                {photoToLoad.imageView.setImageResource(stub_id);
                Log.d("Else 2 : ","else2");
                }
                
        }
    }

    public void clearCache() {
        memoryCache.clear();
        fileCache.clear();
    }
}



นี่โค๊ด ImageLoader คะ พอทราบวิธีแก้ไขบ้างๆไหมค่ะ TT



Tag : Mobile, MySQL, Android







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-07-24 10:09:15 By : Felinonajang View : 1432 Reply : 7
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ได้ลอง Debug หรือยังครับ ว่าวันนี้นั้น ๆ มันเข้าเงื่อนไขในการ Load ตัวรูปภาพหรือไม่






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-07-25 08:47:18 By : mr.win
 


 

No. 2



โพสกระทู้ ( 37 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.win เมื่อวันที่ 2013-07-25 08:47:18
รายละเอียดของการตอบ ::

คะ โหลดนะคะ

1
2

เมื่อวานลองแยกฟังก์ชันออกอะคะ ระหว่างสร้างปฏิทินกับโหลดภาพ ตอนนี้เวลาภาพขึ้นก็ขึ้นครบแล้วคะ ไม่ติดบัคแบบตอนแรกที่บอกว่าเดือนกันยากับธันวาสองวันท้ายไม่ขึ้นอะคะ แต่มันก็มีปัญหาเดิมคือ ภาพขึ้นไม่ครบอะคะ บางทีตอนกดก่อนถึงจะครบแต่ถ้าเดือนไหนมีภาพทั้งเดือนเลยก็จะขาดๆบ้างอะค่ะ



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-07-25 11:29:16 By : Felinonajang
 

 

No. 3



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

เกี่ยวกับพวก memory หรือเปล่าครับ ได้ลอง clear หลังจากที่ไม่ใช้แล้วหรือยังครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-07-25 11:46:50 By : mr.win
 


 

No. 4



โพสกระทู้ ( 37 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : mr.win เมื่อวันที่ 2013-07-25 11:46:50
รายละเอียดของการตอบ ::

อันนี้ใช่การเคลียร์เมมโมรี่รึป่าวค่ะ

Code (Android-Java)
public void clearCache() {
        memoryCache.clear();
        fileCache.clear();
}


บางครั้งกดไปเรื่อย เหมือนมันทำงานหนักหรือไม่โหลดแล้วก็ไม่รู้แล้วมันก็ error หลุดออกมา พอไปดูที่ Logcat มันบอกว่า out of memory อะคะ เคยเป็นแบบนี้แล้วรีไซต์ภาพก็หาย แต่นี่ก็ทำการรีไซต์แล้วนะคะ เลยเริ่มงงว่ารีไซต์ที่ทำไปเนี่ยมันรีไซต์ขนาดรูปภาพหรือขนาดไฟล์รูปภาพอะคะ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-07-25 12:41:16 By : Felinonajang
 


 

No. 5



โพสกระทู้ ( 37 )
บทความ ( 0 )



สถานะออฟไลน์


ตอนนี้ภาพขึ้นเรียบร้อยแล้วคะ แต่มีช้าบ้างนิดหน่อย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-07-26 12:51:32 By : Felinonajang
 


 

No. 6



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 5 เขียนโดย : Felinonajang เมื่อวันที่ 2013-07-26 12:51:32
รายละเอียดของการตอบ ::
สรุปแล้วเป็นเพราะอะไรครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-07-26 13:19:41 By : mr.win
 


 

No. 7



โพสกระทู้ ( 37 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 6 เขียนโดย : mr.win เมื่อวันที่ 2013-07-26 13:19:41
รายละเอียดของการตอบ ::

น่าจะเพราะ cahce อะคะ เพราะสร้างอิมเมจโหลดเดอร์ใหม่แล้วไม่มีปัญหา แล้วก็แก้โค๊ดหลักในการรับส่งค่านิดหน่อยคะ


Code (Android-Java)
public class ImageLoader4 {
	Thread thread;
	Handler handler;
	
	public ImageLoader4(final String imageURL,final ImageView images){
		handler = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				switch (msg.what) {
				case 0 :
					images.setImageBitmap(null);
					break;
				case 1 :
					images.setImageBitmap(null);
					images.setImageBitmap(getResizedBitmap((Bitmap)msg.obj,50,50));
					
					break;
				}
			}
		};
		
		thread = new Thread(){
			@Override
			public void run() { 
				// TODO Auto-generated method stub
				Message message = new Message();
				
				URL url;
				try {
					url = new URL(imageURL);
					BitmapFactory.Options options = new BitmapFactory.Options();
					options.inSampleSize = 8;
					Bitmap bitmap = BitmapFactory.decodeStream(url.openStream(), null, options);
					//Bitmap bitmap  = BitmapFactory.decodeStream(url.openStream());
					message.what = 1;
					message.obj= bitmap;
					bitmap=null;
					handler.sendMessage(message);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					message.what = 0;
					handler.sendMessage(message);
				}
				
				
			}
		};
		thread.start();
	}
	private Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // CREATE A MATRIX FOR THE MANIPULATION
        Matrix matrix = new Matrix();
        // RESIZE THE BIT MAP
        matrix.postScale(scaleWidth, scaleHeight);

        // "RECREATE" THE NEW BITMAP
        Bitmap resizedBitmap = null;
        resizedBitmap =Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
        return resizedBitmap;
    }
	

}



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-07-29 12:07:58 By : Felinonajang
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : [Android] Image ภาพโหลดจาก URL ขึ้นบ้างไม่ขึ้นบ้าง ทำอย่างไรดีค่ะ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่