2017-09-12 49 views
0

我在itextpdf庫中使用XMLWorker將xHTML轉換爲pdf。使用itext加載在線圖像<img>標記

在xHTML內容中有一些標籤,包含來自Internet的本地存儲圖像和圖像。

如:

<img src="https://www.w3schools.com/images/w3schools_green.jpg" alt="W3Schools.com" style="width:104px;height:142px;"/> 

隨着本地圖片,我已經實現ImageProvider提供資源的根路徑。 但是,從互聯網上獲取這些圖像時,無法加載。

我試圖覆蓋Image retrieve(String src)方法的AbstractImageProvider從Internet上載圖像,但我得到了NetworkOnMainThread異常。 我不知道如何使用AsyncTask或任何其他戰爭加載在線圖像,並返回Image retrieve(String src)內。

我在網上搜索過,人們只用本地圖像使用ImageProvider。任何想法對我來說?

+1

加入你的'ImageProvider' –

+0

只有一些方法的一些代碼從提供的URL獲得的圖像來完成。但它違反了NetworkOnMainThread。並且我不知道如何使用Asynctask在檢索方法中返回圖像 – nhoxbypass

+0

發生這種情況是因爲您試圖在線程「main」上請求網絡。我不太瞭解你的用例,但是如果你想在你的類中實現AsyncTask,可以嘗試在'doInBackground()'中調用網絡,並在'onPostExecuted()'中填充結果。記得調用execute()。如果這是一個非常長的請求,請使用'ThreadPoolExecutor'而不是 –

回答

1

我不明白你的問題沒有上下文。這可能適合你的問題。

在您的ImageProvider中創建一個回調。然後每一次AsyncTask(或任何可以幫助你提出請求的東西)都會給出響應,並觸發它。

public class ImageProvider { 
private OnImageProviderCallback callback; 

public ImageProvider(OnImageProviderCallback callback) { 
    this.callback = callback; 
} 

public OnImageProviderCallback getCallback() { 
    return callback; 
} 

public void setCallback(OnImageProviderCallback callback) { 
    this.callback = callback; 
} 

public interface OnImageProviderCallback { 
    void onRetrievedImage(Image image); 
} 

public void retrive() { 
    new AsyncTask<Void, Void, Image>() { 
     @Override 
     protected Image doInBackground(Void... voids) { 
      // request for image here 
      If(request.success()) { 
       return request.getImage(); 
      }else{ 
       // Handle error 
       return null; 
      } 
     } 

     @Override 
     protected void onPostExecute(Image image) { 
      super.onPostExecute(image); 
      callback.onRetrievedImage(image); 
     } 
    }.execute(); 
} 
} 

然後在你的activity,使其通過調用這個

new ImageProvider(new ImageProvider.OnImageProviderCallback() { 
     @Override 
     public void onRetrievedImage(Image image) { 
      // do something with your image 
     } 
    }); 
+0

謝謝,但需要重寫的函數是Image retrieve(String src)。它必須返回一個Image,而不是「void」返回類型。所以我不能在這個方法中使用AsyncTask。 我試圖在「大」AsyncTask內包裝整個轉換爲PDF進度。目前這是工作,但代碼有點難看 – nhoxbypass