David – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

David – Java – Fórum – Programujte.comDavid – Java – Fórum – Programujte.com

 

P
~ Anonymní uživatel
212 příspěvků
4. 12. 2019   #1
-
0
-

Ahoj, zkouším vytvořit jednoduchou aplikaci, která by mi mohla vytáhnou určitá data z webu a zobrazit je.

Pro příklad bych chtěl zobrazit title ze stránky WikiHow. Uvedený kód funguje v čistě v Javě v Intellij studiu.
Ale když ho zpustím v Android studiu, načte se jen původní přednastavené Hello World místo title("wikiHow - How to do anything").
Jsoup mám přidanou jako knihovnu, složky naimportované, vkládám do správného id. Program tyto příkazy nebere jako chybu.
Na zkoušku jsou zkoušel zapsat také čistý text. Ani ten se nenačte místo "Hello World". Takže se funkce main vůbec nezpustí.
Jenže kdybych dal kód z class main do classy onCreate, program by hlásil chyby (nemohu za protected void onCreate(Bundle savedInstanceState) dát throws IOException.
Jak bych to mohl napsat aby se mi funkce main zpustila?
Děkuji

Zde je můj kód: 

package com.example.jsouprun;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
//
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;



public class MainActivity extends AppCompatActivity {

    TextView Promena_TextViewTextView;

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

}

    public void main (String[] args) throws IOException{
        //Document d=Jsoup.connect(("https://www.wikihow.com/Main Page")).get();
        Document doc = Jsoup.connect("https://www.wikihow.com/Main-Page").get();
        String title = doc.title();
        System.out.println(title);


        Promena_TextViewTextView = Promena_TextViewTextView.findViewById(R.id.mojeid);  
//přiřazení proměné ke grafice
        Promena_TextViewTextView.setText(title);
        Promena_TextViewTextView.setText("ahoj");

        }

    }
Nahlásit jako SPAM
IP: 94.113.172.–
P
~ Anonymní uživatel
212 příspěvků
4. 12. 2019   #2
-
0
-

#1 P
Promiňte za název vlákna.

Nepatří tam samozřejmě jméno ale "Jsoup - kam zařadit příkazy aby se zpustily?"


Nahlásit jako SPAM
IP: 94.113.172.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 12. 2019   #3
-
0
-

Jenže kdybych dal kód z class main do classy onCreate, program by hlásil chyby

Class je MainActivity. main a onCreate jsou metody :)

nemohu za protected void onCreate(Bundle savedInstanceState) dát throws IOException

Když děláš něco, co může hodit vyjímku, tak musíš tu dotčenou metodu příslušně označit s throws, nebo tu vyjímku v ní můžeš odchytit.

A když overriduješ metodu, která původně vyjímky nevyhazuje, tak nemůžeš říct, že teď najednou vyhazuje, ale pořád je můžeš sám odchytit.

Jak bych to mohl napsat aby se mi funkce main zpustila?

Vstupní bod aktivit je onCreate. Ten main teoreticky můžeš normálně zavolat, ale nevidím v tom smysl. Na statický main zapomeň.

Nezkoušeno, ale takhle nějak by to snad mohlo fungovat:

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

	String title;

	try {
		Document doc = Jsoup.connect("https://www.wikihow.com/Main-Page").get();
		title = doc.title();
	} catch (IOException e) {
		title = e.getMessage();
	}

	Promena_TextViewTextView = Promena_TextViewTextView.findViewById(R.id.mojeid);
	Promena_TextViewTextView.setText(title);
}
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 12. 2019   #4
-
0
-

   

Promena_TextViewTextView = Promena_TextViewTextView.findViewById(R.id.mojeid);

A tohle je krávovina, ale na to asi přijdeš.

Nahlásit jako SPAM
IP: 213.211.51.–
David
~ Anonymní uživatel
177 příspěvků
4. 12. 2019   #5
-
0
-

#3 gna

Díky za zájem.

Teď se však ale aplikace nenačte a okamžitě se stopne a ukáže se mi dlouhý výpis FATAL EXCEPTION:

https://imgur.com/JFziyr3

https://imgur.com/OkQ5Ugx


Nahlásit jako SPAM
IP: 94.113.172.–
Kit+15
Guru
4. 12. 2019   #6
-
0
-

#5 David
Bohužel jsou oba screenshoty nečitelné, takže snaha byla zbytečná.

Nahlásit jako SPAM
IP: 46.135.87.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
gna
~ Anonymní uživatel
1891 příspěvků
4. 12. 2019   #7
-
0
-
Nahlásit jako SPAM
IP: 213.211.51.–
David
~ Anonymní uživatel
177 příspěvků
4. 12. 2019   #8
-
0
-

Můžeš si je zvětšit, pak to bude čitelné dobře.

Nahlásit jako SPAM
IP: 94.113.172.–
David
~ Anonymní uživatel
177 příspěvků
4. 12. 2019   #9
-
0
-

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.jsouprun, PID: 4780
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jsouprun/com.example.jsouprun.MainActivity}: android.os.NetworkOnMainThreadException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
        at java.net.InetAddress.getAllByName(InetAddress.java:787)
        at com.android.okhttp.Dns$1.lookup(Dns.java:39)
        at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175)
        at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141)
        at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83)
        at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174)
        at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
        at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
        at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
        at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(Unknown Source:0)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:730)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:705)
        at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:295)
        at org.jsoup.helper.HttpConnection.get(HttpConnection.java:284)
        at com.example.jsouprun.MainActivity.onCreate(MainActivity.java:27)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Nahlásit jako SPAM
IP: 94.113.172.–
David
~ Anonymní uživatel
177 příspěvků
4. 12. 2019   #10
-
0
-

#7 gna
A jak to teda můžu spravit?

Nahlásit jako SPAM
IP: 94.113.172.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 12. 2019   #11
-
0
-

#10 David
Na tom odkazu je i ukázka kódu.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý