java - Работа отдельного потока с Jsoup. Android
Был создан класс Parser
,использующий Jsoup, который объединял в себе методы для парсинга значений с сайта. В обычной консоли все его методы работали прекрасно. Затем я перенёс этот класс в Android Studio для дальнейшего использования в приложении. Но в главном потоке нельзя взаимодействовать с интернетом поэтому я вынужден был перенести все использование Parser
в новый поток:
class ProgressTask extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... voids) {
title = Parser.getRandomStory("title");
content = Parser.getRandomStory("story");
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
title_story.setText(title);
content_story.setText(content);
}
}
upd Код метода:
public static String getRandomStory(String value){
String link = "https://pastach.ru/p/random";
String title = "Title: ";
String story = "Story: ";
try {
Document doc = Jsoup.connect(link).get();
Element title_text = doc.getElementsByClass("header-title").get(0);
title += title_text.text();
Element story_text = doc.getElementsByClass("paste-content").get(0);
story += story_text.text();
//System.out.println(title);
//System.out.println(story);
} catch (IOException e) {
return ("CONNECTION HAS BEEN LOST");
}
if(value.equals("story")){
return story;
}else{
return title;
}
}
upd2: логи:
07-22 20:38:01.768 24422-24422/com.example.len.coolstorybro E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.len.coolstorybro, PID: 24422 java.lang.NullPointerException: Attempt to invoke virtual method void android.widget.TextView.setText(java.lang.CharSequence) on a null object reference at com.example.len.coolstorybro.RandomStoryFragment$ProgressTask.onPostExecute(RandomStoryFragment.java:54) at com.example.len.coolstorybro.RandomStoryFragment$ProgressTask.onPostExecute(RandomStoryFragment.java:43) at android.os.AsyncTask.finish(AsyncTask.java:651) at android.os.AsyncTask.access$500(AsyncTask.java:180) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5927) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
Но по каким то причинам переменный title
и content
всегда равны null
. Что я делаю не так и как мне это исправить?
- 37
- 0
- 22 янв 2018 2018-01-22 17:40:21
- Felay
Ответов пока нет
id
в коде и xml. Или показывайте код и разметку активности.findViewById
- надеюсь вonCreate
послеsetContentView
применили? — woesss 22 янв 20182018-01-22 18:31:30.000000onPostExecute
- это единственное место где Вы их используете - тоNullPointerException
это не может вызывать. Скорее всего Вы не инициализировали переменныеtitle_story / content_story
до запуска таска. P.S. Всегда прикладывайте стектрейс ошибки к вопросу, если таковая имеется. — woesss 22 янв 20182018-01-22 16:04:00.000000