Diskuze: Android Studio datá z internetu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 16 zpráv z 16.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Píšem z mobilu keďže vidím že si sa pred pár minútami pýtal a chcem ti skúsiť poradiť čo najskôr.
Chyba by mala byť v tom, že túto funkciu voláš z main threadu. Preto ak chceš robiť takéto veci musíš využiť buď AsyncTask alebo vytvor klasicky nový Thread v ktorom přepíš funkciu run aby sa v novom vlákne vykonalo to čo potrebuješ. Ak sa dostanem k PC môžem poslať kód.
Myslíš takto?
new Thread(new Runnable() {
@Override
public void run() {
//program
});
Lebo takto som to skusal ale takto mi to skipne celú úlohu aj ked bez
erroru 
Musíš nad tím vláknem ještě zavolat start.
Hmm, tak tam bude asi ešte iný problém. Applikácia padá stále.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView)findViewById(R.id.textView);
new Thread(new Runnable() {
@Override
public void run() {
String web = "";
try{
URL url = new URL("https://stackoverflow.com/questions/1921514/how-to-run-a-runnable-thread-in-android");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = bufferedReader.readLine()) != null){
web += line;
}
bufferedReader.close();
}catch (MalformedURLException e){
}catch (IOException e){
e.printStackTrace();
}
textView.setText(web.substring(0,10));
}
}).start();
}
Z jiného vlákna nemůžeš přistupovat ke GUI prvkům, konkrétně
textView.setText(web.substring(0,10));
Ještě sem pro jistotu pošli chybovou hlášku, ale asi to bude ono...
Mne chybu nedava to az v telefóne mi aplikácia padne "Ľutujeme app prestala pracovať"
Tak snad to debuguješ přes to android studio.
Když to máš propojený přes kabel, tak se při spuštění aplikace zobrazí
základní logování, do kterého se zapisují i chyby.
Skús takto:
public class MainActivity extends Activity {
TextView textView;
String web = "";
ProgressDialog mProgress;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
//spusti AsyncTask
new DownloadData().execute();
}
private class DownloadData extends AsyncTask<Void, Void, Void> {
DownloadData() {
}
//vykona sa na pozadi
@Override
protected void doInBackground(Void... params) {
try {
URL url = new URL("https://www.itnetwork.cz/java/zaklady");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
web += line;
}
bufferedReader.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(web);
}
//pred vykonanim vykresli dialog so spravou
@Override
protected void onPreExecute() {
mProgress = new ProgressDialog(MainActivity.this);
mProgress.setMessage("Pracujem...");
}
//po vykonani skri dialog a vypis data
@Override
protected void onPostExecute() {
mProgress.hide();
textView.setText(web);
}
@Override
protected void onCancelled() {
mProgress.hide();
}
}
}
V debuggu nemám žiadnu chybu a napr tu stackoverflow.com to na tom príspevku kde je 5 likov urobil tiez ze TextViev nastavil vo vlákne.
This seems to me like an incorrect example, since a UI update is being done from a background thread.
Petr dobre to som si neprecital ale aj ked to dám mimo to vlákno tak sa nic
nezmení.
Matúš s tím AsyncTask som vzivote nerobil takze otmu nerozumiem, ale
skopiroval som to a je tam plno červenej ani build mi to nezrobilo
08-18 14:48:55.439 9131-9167/com.example.juraj.kurzovakalkulacka E/AndroidRuntime: FATAL EXCEPTION: Thread-8664
Process: com.example.juraj.kurzovakalkulacka, PID: 9131
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6610)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1005)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:4548)
at android.view.View.invalidate(View.java:11229)
at android.view.View.invalidate(View.java:11178)
at android.widget.TextView.checkForRelayout(TextView.java:6807)
at android.widget.TextView.setText(TextView.java:3882)
at android.widget.TextView.setText(TextView.java:3740)
at android.widget.TextView.setText(TextView.java:3715)
at com.example.juraj.kurzovakalkulacka.MainActivity$1.run(MainActivity.java:57)
at java.lang.Thread.run(Thread.java:841)
napr mi tam stále podčiarkuje tie Exception ktoré pritommám v catch
bloku, nvm tomu nerozumiem 
OK tak to funguje ale mal si tam chybu v doInBackgroind si mal void ale mne
tam pitalo Void a v onPostExecute() to pytalo onPostExecute(Void aVoid). Asi si
to pisal na mobile, ak hej tak rešpekt
Ale popravde toto som moc
nepocho
racej by som to cez
ten Thread porobil ale asi to nejde 
Hej? Tak super, že si to spojazdnil
Áno, už som si všimol celkovo
som v doInBackground mohol vrátiť ten String web a v onPostExecute to použiť
pre setText().
Ak chceš tu je to dobre vysvetlené Android Developers
Zobrazeno 16 zpráv z 16.