我收到有關Google Play中某個應用的崩潰報告。我使用asynctask來獲取圖像,它適用於我測試過的每個設備,但也有一些用戶遇到問題。這是非常罕見的,但我需要調試和解決這個問題。這是doInBackground方法:AsyncTask崩潰報告
public class MetaTask extends AsyncTask<Void, Void, Void> {
URL imageurl;
@Override
protected Void doInBackground(Void... params) {
try {
doc = Jsoup.connect(data).get();
Elements meta = doc.select("meta[property=og:image]");
for (Element element : meta) {
extracted = element.attr("content");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
imageurl = new URL(extracted);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bitmap = BitmapFactory.decodeStream(imageurl.openConnection()
.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
的空指針似乎是在這條線(271):
bitmap = BitmapFactory.decodeStream(imageurl.openConnection()
.getInputStream());
我想出於某種原因變量IMAGEURL不beeing一個實際的URL時,我唯一能想到的就是檢查包含「http」和「jpg」的字符串變量,如果這些變量不存在,則使用Flurry存儲這些信息。
在執行asynctask之前,會檢查互聯網連接的可用性,以免造成這種情況。
任何人都可以想到別的東西造成這種情況嗎?這裏的崩潰報告我的完整堆棧跟蹤記錄:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:278)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.NullPointerException
at com.ddroid.photosaveinstagram.MainActivity$MetaTask.doInBackground(MainActivity.java:271)
at com.ddroid.photosaveinstagram.MainActivity$MetaTask.doInBackground(MainActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 5 more
如果您在try塊中記錄imageURl,它是否爲空? –
是的,我可以嘗試使用Flurry。問題是,我在9臺設備上進行了測試。它一直有效,但是這些來自用戶。 –
你的錯誤來自濫用try/catch來壓制/忽略異常。例外情況不應該被忽視,但應該處理。當一個點出現異常(在您的情況下爲'imageUrl')並且需要此值時,整個塊的執行將被停止。你不應該執行代碼,這取決於你壓制但沒有正確處理的try/catch中的變量/對象。 – Tseng