How to get HTML content using class name?












0















I'm trying to create a class which uses the jsoup library to make an object of elements from a website.

After reading the documentation, this is what I have:



public class storyObj {
public String title;
public String preview;
public String date;
String url = "http//:davisclipper.com";
Bitmap bitmap;

private class Title extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
title = storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}

public String getTitle(){
return title;
}


In my main activity I set a TextView to get the returned title:



storyObj story = new storyObj();
String text = story.getTitle();

TextView title = (TextView) findViewById(R.id.main_title);
title.setText(text);


All I get is an empty string.










share|improve this question

























  • Your url is wrong, no? Are you sure this website is not dynamically generates by Javascript? If so, Jsoup is the wrong library

    – cricket_007
    Dec 16 '17 at 1:50


















0















I'm trying to create a class which uses the jsoup library to make an object of elements from a website.

After reading the documentation, this is what I have:



public class storyObj {
public String title;
public String preview;
public String date;
String url = "http//:davisclipper.com";
Bitmap bitmap;

private class Title extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
title = storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}

public String getTitle(){
return title;
}


In my main activity I set a TextView to get the returned title:



storyObj story = new storyObj();
String text = story.getTitle();

TextView title = (TextView) findViewById(R.id.main_title);
title.setText(text);


All I get is an empty string.










share|improve this question

























  • Your url is wrong, no? Are you sure this website is not dynamically generates by Javascript? If so, Jsoup is the wrong library

    – cricket_007
    Dec 16 '17 at 1:50
















0












0








0








I'm trying to create a class which uses the jsoup library to make an object of elements from a website.

After reading the documentation, this is what I have:



public class storyObj {
public String title;
public String preview;
public String date;
String url = "http//:davisclipper.com";
Bitmap bitmap;

private class Title extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
title = storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}

public String getTitle(){
return title;
}


In my main activity I set a TextView to get the returned title:



storyObj story = new storyObj();
String text = story.getTitle();

TextView title = (TextView) findViewById(R.id.main_title);
title.setText(text);


All I get is an empty string.










share|improve this question
















I'm trying to create a class which uses the jsoup library to make an object of elements from a website.

After reading the documentation, this is what I have:



public class storyObj {
public String title;
public String preview;
public String date;
String url = "http//:davisclipper.com";
Bitmap bitmap;

private class Title extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
title = storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}

public String getTitle(){
return title;
}


In my main activity I set a TextView to get the returned title:



storyObj story = new storyObj();
String text = story.getTitle();

TextView title = (TextView) findViewById(R.id.main_title);
title.setText(text);


All I get is an empty string.







java android jsoup






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 20 '18 at 20:49









Frank

156




156










asked Dec 16 '17 at 0:35









dustinos3dustinos3

4491717




4491717













  • Your url is wrong, no? Are you sure this website is not dynamically generates by Javascript? If so, Jsoup is the wrong library

    – cricket_007
    Dec 16 '17 at 1:50





















  • Your url is wrong, no? Are you sure this website is not dynamically generates by Javascript? If so, Jsoup is the wrong library

    – cricket_007
    Dec 16 '17 at 1:50



















Your url is wrong, no? Are you sure this website is not dynamically generates by Javascript? If so, Jsoup is the wrong library

– cricket_007
Dec 16 '17 at 1:50







Your url is wrong, no? Are you sure this website is not dynamically generates by Javascript? If so, Jsoup is the wrong library

– cricket_007
Dec 16 '17 at 1:50














1 Answer
1






active

oldest

votes


















1














You seem to be misunderstanding how threads work. The Jsoup happens in the background. Meanwhile, you're continuing on the main thread with setting the text, which you're not guaranteed to have



You need to move the async task into the activity.



And you need to implement a onPostExecute for it where you will title.setText(text);



You also need to make the doInBackground return title



Like so



this.title = (TextView) findViewById(R.id.main_title);

new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
return storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String content) {
MainActivity.this.title.setText(content);
}
}.execute();




Unless this website is dynamically generated by Javascript, Jsoup is the wrong library though. Not sure if a locals news site is that advanced, though






share|improve this answer


























  • Thanks for your help. I’ll have to look into other options then.

    – dustinos3
    Dec 16 '17 at 2:18











  • This should work, did you try?

    – cricket_007
    Dec 16 '17 at 9:14











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f47841493%2fhow-to-get-html-content-using-class-name%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














You seem to be misunderstanding how threads work. The Jsoup happens in the background. Meanwhile, you're continuing on the main thread with setting the text, which you're not guaranteed to have



You need to move the async task into the activity.



And you need to implement a onPostExecute for it where you will title.setText(text);



You also need to make the doInBackground return title



Like so



this.title = (TextView) findViewById(R.id.main_title);

new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
return storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String content) {
MainActivity.this.title.setText(content);
}
}.execute();




Unless this website is dynamically generated by Javascript, Jsoup is the wrong library though. Not sure if a locals news site is that advanced, though






share|improve this answer


























  • Thanks for your help. I’ll have to look into other options then.

    – dustinos3
    Dec 16 '17 at 2:18











  • This should work, did you try?

    – cricket_007
    Dec 16 '17 at 9:14
















1














You seem to be misunderstanding how threads work. The Jsoup happens in the background. Meanwhile, you're continuing on the main thread with setting the text, which you're not guaranteed to have



You need to move the async task into the activity.



And you need to implement a onPostExecute for it where you will title.setText(text);



You also need to make the doInBackground return title



Like so



this.title = (TextView) findViewById(R.id.main_title);

new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
return storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String content) {
MainActivity.this.title.setText(content);
}
}.execute();




Unless this website is dynamically generated by Javascript, Jsoup is the wrong library though. Not sure if a locals news site is that advanced, though






share|improve this answer


























  • Thanks for your help. I’ll have to look into other options then.

    – dustinos3
    Dec 16 '17 at 2:18











  • This should work, did you try?

    – cricket_007
    Dec 16 '17 at 9:14














1












1








1







You seem to be misunderstanding how threads work. The Jsoup happens in the background. Meanwhile, you're continuing on the main thread with setting the text, which you're not guaranteed to have



You need to move the async task into the activity.



And you need to implement a onPostExecute for it where you will title.setText(text);



You also need to make the doInBackground return title



Like so



this.title = (TextView) findViewById(R.id.main_title);

new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
return storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String content) {
MainActivity.this.title.setText(content);
}
}.execute();




Unless this website is dynamically generated by Javascript, Jsoup is the wrong library though. Not sure if a locals news site is that advanced, though






share|improve this answer















You seem to be misunderstanding how threads work. The Jsoup happens in the background. Meanwhile, you're continuing on the main thread with setting the text, which you're not guaranteed to have



You need to move the async task into the activity.



And you need to implement a onPostExecute for it where you will title.setText(text);



You also need to make the doInBackground return title



Like so



this.title = (TextView) findViewById(R.id.main_title);

new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
return storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String content) {
MainActivity.this.title.setText(content);
}
}.execute();




Unless this website is dynamically generated by Javascript, Jsoup is the wrong library though. Not sure if a locals news site is that advanced, though







share|improve this answer














share|improve this answer



share|improve this answer








edited Dec 16 '17 at 2:00

























answered Dec 16 '17 at 1:53









cricket_007cricket_007

81.2k1142111




81.2k1142111













  • Thanks for your help. I’ll have to look into other options then.

    – dustinos3
    Dec 16 '17 at 2:18











  • This should work, did you try?

    – cricket_007
    Dec 16 '17 at 9:14



















  • Thanks for your help. I’ll have to look into other options then.

    – dustinos3
    Dec 16 '17 at 2:18











  • This should work, did you try?

    – cricket_007
    Dec 16 '17 at 9:14

















Thanks for your help. I’ll have to look into other options then.

– dustinos3
Dec 16 '17 at 2:18





Thanks for your help. I’ll have to look into other options then.

– dustinos3
Dec 16 '17 at 2:18













This should work, did you try?

– cricket_007
Dec 16 '17 at 9:14





This should work, did you try?

– cricket_007
Dec 16 '17 at 9:14


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f47841493%2fhow-to-get-html-content-using-class-name%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

A Topological Invariant for $pi_3(U(n))$