Google Play의 앱에 오류 보고서가 표시됩니다. asynctask를 사용하여 이미지를 얻었지만 테스트 한 모든 장치에서 작동하지만 문제가있는 일부 사용자가 있습니다. 정말 드문 일이지만 디버깅하고 수정해야합니다.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());
내가 어떤 이유로 변수 이미지 URL이 실제 URL을 beeing는하지에 대해 생각하고는 이렇게 doInBackground 방법입니다 내가 생각할 수있는 유일한 것은 "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
imageURl을 try 블록에 기록하면 null입니까? –
예, Flurry를 사용하여 시도해 볼 수 있습니다. 문제는, 나는 이것을 9 개의 장치에서 시험했다. 그것은 항상 효과가 있었지만 이들은 사용자들로부터오고 있습니다. –
당신의 오류는 try/catch를 남용하여 예외를 억제/무시합니다. 예외는 무시해서는 안되지만 처리해야합니다. 한 지점에서 예외가 발생하고 (이 경우 'imageUrl')이 값이 필요하면 전체 블록의 실행을 중지합니다. 당신은 억지하지만 올바르게 처리하지 않은 try/catch의 변수/객체에 의존하는 코드를 실행해서는 안됩니다. – Tseng