Я получаю сообщение о сбоях в приложении 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;
}
NullPointer, кажется, на этой линии (271):
bitmap = BitmapFactory.decodeStream(imageurl.openConnection()
.getInputStream());
Я думаю о том почему переменная ImageUrl не неоспоримым фактический адрес, то Единственное, что я могу придумать, это проверить строковую переменную, извлеченную для содержания «http» и «jpg», и если они не хранят эту информацию с помощью Flurry.
Перед выполнением асинхронной проверки выполняется проверка доступности интернет-соединения, поэтому это не может быть причиной этого.
Может ли кто-нибудь подумать о чем-то другом, вызывающем это? Вот мой полный StackTrace запись отчетов о сбоях:
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
если вы регистрируете изображениеURl внутри блока try, то это null? –
Да, я могу попробовать, используя Flurry. Проблема в том, что я тестировал это на 9 устройствах. Он всегда работал, но они поступают от пользователей. –
Ваша ошибка связана с злоупотреблением try/catch для исключения/игнорирования исключений. Исключения не должны игнорироваться, а обрабатываться. Когда исключение происходит в одной точке («imageUrl» в вашем случае), и это значение необходимо, выполнение всего блока, который должен быть остановлен. Вы не должны выполнять код, который зависит от переменной/объектов из try/catch, которую вы подавили, но не обрабатывали правильно. – Tseng