2017-04-10 91 views
0
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 

      loadImageFromUrl(url); 

     } 
    }, 2000); 
    addTouchlistener(); 
    addButtonListener(); 
} 

private void loadImageFromUrl(String url) { 
    Picasso.with(iv.getContext()) 
      .load(url) 
      .networkPolicy(NetworkPolicy.NO_CACHE, NetworkPolicy.NO_STORE) 
      .into(iv); 
     } 

「url」是我的http服務器,我將不斷收到.jpg。 我想重複的功能,每2秒接收.JPGAndroid重複函數Picasso每2秒

在這種情況下,第一次加載圖像將被延遲2秒 但是,當我更新我的照片,它不能顯示新照片

我也嘗試了計時器「scheduleAtFixedRate」重複,但它不工作。

回答

0

因爲一個處理程序只運行你發佈給它的一次。它不重複。要重複執行此操作,可運行程序需要在最後重新發布。

雖然我建議你不要這樣做。你多久更換一次圖像?每隔幾分鐘?幾個小時?每2秒檢查一次是荒謬的,你會在99%的時間內浪費帶寬。使用更長的計時器。更好的是,使用推送消息來告訴客戶端何時重新加載。

0

這是我在片段中的一個工作示例,但邏輯與活動相同。 我包含額外的代碼來關閉應用程序進入onPause()時的下載。

protected Handler programacionTimer; 
protected Runnable programacionRunnable; 

.... 

@Override 
    public void onResume() { 
     super.onResume(); 
     if (programacionTimer == null) { 
       programacionTimer = new Handler(); 
     } 

     if (programacionRunnable == null) { 
      programacionRunnable = new Runnable() { 
        @Override 
        public void run() { 

          //Here what you to do (download the image) 

          programacionTimer.postDelayed(this, 2000); 

        } 

      }; 
     } 

     programacionTimer.postDelayed(programacionRunnable, 2000); 

} 


@Override 
    public void onPause() { 
     super.onPause(); 

     programacionTimer.removeCallbacks(programacionRunnable); 
     programacionRunnable = null; 
    } 
+0

the handler.postDelayed(this,2000);需要宣佈最終和工作仍然不能重複... –