JSoup

0

Witam Was

Jestem tutaj nowy i totalnie zielony w programowaniu. Piszę teraz program na studia i mam problem z kodem, a mianowicie piszę program w Android Studio i chcę, aby program pobierał wyniki ze stronki Lotto, a następnie wyświetlał je w aplikacji tak, aby była możliwość jeszcze obliczania, która cyfra najczęściej wypada. Jednakże nie mogę skompilować programu, ponieważ w linii

txt = findViewById(R.id.txt);

wyskakuje błąd "error: incompatible types: no unique maximal instance exists for type variable T with upper bounds CollationElementIterator,View text = findViewById(R.id.textView2);"

Z czego to może wynikać i jakby ktoś potrafił to w prosty sposób wytłumaczyć.

Tak wygląda mój kod:

package com.example.lotto1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.text.CollationElementIterator;

public class Dashboard extends AppCompatActivity {



    String url = "http://www.lotto-centrum.com/lotto/wyniki.php5";
    int connectionTimeoutMs = 10000;
    private CollationElementIterator text;


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

        analiza();
    }

    private void analiza() {
        txt = findViewById(R.id.txt);
        new Thread(new Runnable() {
            @Override
            public void run() {
                final StringBuilder stringBuilder = new StringBuilder(); // do łączenia tekstów
                try {
                    Document doc = Jsoup.connect(url).get();
                    Elements elementy = doc.select(".menu");
                    for (Element e : elementy) { // szukanie po wszystkich znalezionych elementach
                        stringBuilder.append("\n").append("Text : ").append(e.text());
                    }
                } catch (IOException e) {
                    stringBuilder.append("Error : ").append(e.getMessage()).append("\n");
                }
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        txt.setText(stringBuilder.toString());
                    }
                });
            }
        }).start();
    }
}
0

Co w ogóle próbujesz zrobić w tej linijce txt = findViewById(R.id.txt);? Do jakiegoś CollationElementIterator chcesz przypisać kontrolkę z widoku.

0

Szczerze mówiąc, jest to kod poprawiony od mojego wykładowcy, który stwierdził, że teraz po tym jak to dodał to powinno działać. Tak jak już mówiłem jestem mocno zielony w tym i nigdy nie przypuszczałem, że będę programował w Androidzie.

0

Spróbowałem kod odtworzyć w nowym projekcie i go trochę wydaje mi się, że poprawiłem, skompilował się bez błędów, jednakże gdy dochodzi do symulacji to wyświetla się w symulatorze, że aplikacja została zatrzymana. O co może chodzić?

package com.example.lotto3;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    TextView txt = null;

    String url = "http://www.lotto-centrum.com/lotto/wyniki.php5";
    int connectionTimeoutMs = 15000;


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

    analiza();
    }

    private void analiza() {
        txt = findViewById(R.id.txt);
        new Thread(new Runnable() {
            @Override
            public void run() {
                final StringBuilder stringBuilder = new StringBuilder(); // do łączenia tekstów
                try {
                    Document doc = Jsoup.connect(url).get();
                    Elements elementy = doc.select(".menu");
                    for (Element e : elementy) { // szukanie po wszystkich znalezionych elementach
                        stringBuilder.append("\n").append("Text : ").append(e.text());
                    }
                } catch (IOException e) {
                    stringBuilder.append("Error : ").append(e.getMessage()).append("\n");
                }
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        txt.setText(stringBuilder.toString());
                    }
                });
            }
        }).start();
    }

}

2

Wróżę - najprawdopodobniej chodzi o brak pozwoleń na korzystanie z Internetu w manifeście aplikacji. Jak wkleisz treść błędu, to można będzie więcej powiedzieć (https://developer.android.com/studio/debug/am-logcat).

0

Super, dzięki wielkie za pomoc. Pomogło :)

0

Mam jeszcze jedno pytanie. Jeżeli na stronie jest rozwijana lista, gdzie można wybrać ilość losowań (10,250,...), które będą zaczytywane to jak sprawić, żeby do aplikacji pobierać dane nie domyślne na stronie, czyli 10 ostatnich pobrań, a na przykład pobrać ostatnich 1000 losowań?

Tak wygląda kod strony z tą sekcją:

<FORM ACTION="http://lotto-centrum.com/lotto/wyniki.php5" METHOD=POST>
<INPUT TYPE="hidden" name="tryb" VALUE="3">
<SELECT NAME="zak" class="kl_a2">
<OPTION VALUE="10">  Ostatnie 10 losowań  <OPTION VALUE="25">  Ostatnie 25 losowań  
<OPTION VALUE="50">  Ostatnie 50 losowań  <OPTION VALUE="100">  Ostatnie 100 losowań  
<OPTION VALUE="200">  Ostatnie 200 losowań  <OPTION VALUE="500">  Ostatnie 500 losowań  
<OPTION VALUE="1000">  Ostatnie 1000 losowań  
</SELECT>

1 użytkowników online, w tym zalogowanych: 0, gości: 1