Использование Jsoup для извлечения данных для Android studio - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь извлечь данные, чтобы получить общедоступный IP-адрес каждого из моих пользователей, чтобы я мог сравнить, если таковые имеются в настоящее время. на сайте нет html, просто текст, который говорит: {"ip": " текущий ip "} Я пытаюсь объяснить это и использую тост, чтобы проверить, правильно ли я владею информацией, но тост всегда пуст. Вот мой код:

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_homepage);

    new doit().execute();
}

public class doit extends AsyncTask<Void, Void, Void>{
    String ipAddressGet;
    @Override
    protected Void doInBackground(Void... params) {

        try {
            Document doc = Jsoup.connect("http://ipv4bot.whatismyipaddress.com/").get();
            ipAddressGet = doc.text();

        }catch(Exception e){
            e.printStackTrace();
        }


        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        Toast.makeText(Homepage.this, ipAddressGet, Toast.LENGTH_LONG).show();

    }
}

извините, я никогда не использовал этот сайт, чтобы опубликовать, надеюсь, все ясно. все дескрипции для jsoup включают использование HTML, но здесь нет ни одного, поэтому я не знаю, как применить там дескрипции

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Измените свой код:

try {
    Document doc = Jsoup.connect("http://ipv4bot.whatismyipaddress.com/").get();
    ipAddressGet = doc.text();
} catch(Exception e) {
    e.printStackTrace();
}

К этому:

try {
    Document doc = Jsoup.connect("http://ipv4bot.whatismyipaddress.com/").get();
    Element body = doc.body();
    ipAddressGet = body.text();
} catch(Exception e) {
    e.printStackTrace();
}

Но для получения и обработки ответов на запросы в Интернете используйте одну из известных библиотек, например Retrofit или Volley.

0 голосов
/ 01 мая 2018

Вам не нужен JSoup для этого. Java может справиться с этим просто отлично:

private static String readStringFromURL(String requestURL) throws IOException
{
    try (Scanner scanner = new Scanner(new URL(requestURL).openStream(),
            StandardCharsets.UTF_8.toString()))
    {
        scanner.useDelimiter("\\A");
        return scanner.hasNext() ? scanner.next() : "";
    }
}

Если ваш текст также отформатирован в JSON, большинство библиотек синтаксического анализа JSON также имеют встроенные возможности чтения по URL-адресу.

0 голосов
/ 01 мая 2018

Просто используйте это

ipAddressGet = doc.body().ownText();

вместо

ipAddressGet = doc.text();
...