Android studio
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Zdarec tu všici
Když tu mame tu sekci java, neumí někdo v Android studiu?
Když tu mame tu sekci java, neumí někdo v Android studiu?
- PetrSmetana
- Příspěvky:313
- Registrován:pon 22. črc 2019 9:06:45
- Bydliště:Mnich
- Dal poděkování: 28 poděkování
- Dostal poděkování: 60 poděkování
- Kontaktovat uživatele:
Re: Android studio
Shodou náhod jsem ho už párkrát použil pro vývoj aplikace pro tracking a výměnu informací přes síť. Co bys potřeboval?
Modré z nebe na počkání, zázraky do dvou dnů.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
Vše ohledně te výměně informací přes síť
Hlavně ssh a web.
Co třeba třeba přes ssh?
Toto je funkční a hodně použivam.
channelssh.setCommand("lsusb > /home/pi/test1.txt");
channelssh.setCommand("sudo reboot");
https://www.codenong.com/47438181/
Uplně na stejnem principu ale pokud jsem to pochopil, tak
channel1.setCommand("ls /home/pi/pic | sed -n 5p");
aaaa = new String(baos.toByteArray());
By to mělo načist obsah adresaře do aaaa
A nedo třeba channel1.setCommand("echo "$(cat /home/pi/teplota)" | sed -n 5p");
Nějak se mi nedaři, upravit ten muj zdrojak.
Vidim v logu že jsem na raspi připojen ale řetězec aaaa je prazdy.
Nemusi to byt zrovna přes tu jsch.
Uvitam cokoliv.
Hlavně ssh a web.
Co třeba třeba přes ssh?
Toto je funkční a hodně použivam.
channelssh.setCommand("lsusb > /home/pi/test1.txt");
channelssh.setCommand("sudo reboot");
Při brouzdaní po netu jsem minulý týden našel toto.package com.example.myapplicationssh;
import android.os.AsyncTask;
import android.os.Bundle;
import java.io.ByteArrayOutputStream;
import java.util.Properties;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import android.app.Activity;
import android.view.View;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public static String executeRemoteCommand(String username,String password,String hostname,int port)
throws Exception {
JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, port);
session.setPassword(password);
// Avoid asking for key confirmation
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
session.connect();
// SSH Channel
ChannelExec channelssh = (ChannelExec)
session.openChannel("exec");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
channelssh.setOutputStream(baos);
// Execute command
//channelssh.setCommand("lsusb > /home/pi/test1.txt");
channelssh.setCommand("sudo reboot");
channelssh.connect();
try{Thread.sleep(10000);}catch(Exception ee){};
channelssh.disconnect();
return baos.toString();
}
public void zmacklTlacitko(View view) {
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
try {
executeRemoteCommand("pi", "xxxx","192.168.1.5", 22);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);
}
}
https://www.codenong.com/47438181/
Uplně na stejnem principu ale pokud jsem to pochopil, tak
channel1.setCommand("ls /home/pi/pic | sed -n 5p");
aaaa = new String(baos.toByteArray());
By to mělo načist obsah adresaře do aaaa
A nedo třeba channel1.setCommand("echo "$(cat /home/pi/teplota)" | sed -n 5p");
Nějak se mi nedaři, upravit ten muj zdrojak.
Vidim v logu že jsem na raspi připojen ale řetězec aaaa je prazdy.
Nemusi to byt zrovna přes tu jsch.
Uvitam cokoliv.
- PetrSmetana
- Příspěvky:313
- Registrován:pon 22. črc 2019 9:06:45
- Bydliště:Mnich
- Dal poděkování: 28 poděkování
- Dostal poděkování: 60 poděkování
- Kontaktovat uživatele:
Re: Android studio
co ti vrátí
ls /home/pi/pic | sed -n 5p
Když to pošleš do commandlajny?
ls /home/pi/pic | sed -n 5p
Když to pošleš do commandlajny?
Modré z nebe na počkání, zázraky do dvou dnů.
- jiri.tusla
- Příspěvky:75
- Registrován:ned 08. zář 2019 15:45:09
- Dal poděkování: 8 poděkování
- Dostal poděkování: 19 poděkování
Re: Android studio
Kód: Vybrat vše
sed -n 5p
Máš tolik souborů v
Kód: Vybrat vše
~pi/pic
Dej člověku rybu a nebude mít hlad jeden den.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
Tak bych chtěl poprosit někoho, kdo umí Javu.
Upozorňují, že android studio jsem viděl týden před 2 roky a týden teď a Javu neumím, takže mně berte s rezervou
Je tam public static String executeRemoteCommand
a dole return baos.toString();
Tim padem vraci string
V tom baos je načtena ta teplota.
Jak ji dostanu do toho Label1.setText co je v tom public void zmacklTlacitko?
Upozorňují, že android studio jsem viděl týden před 2 roky a týden teď a Javu neumím, takže mně berte s rezervou
Kód: Vybrat vše
package com.example.myapplicationssh;
import android.os.AsyncTask;
import android.os.Bundle;
import java.io.ByteArrayOutputStream;
import java.text.BreakIterator;
import java.util.Properties;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import android.app.Activity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
//private String aaaa;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public static String executeRemoteCommand(String username,String password,String hostname,int port)
throws Exception {
JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, port);
session.setPassword(password);
// Avoid asking for key confirmation
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
session.connect();
ChannelExec channelssh = (ChannelExec)
session.openChannel("exec");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
channelssh.setOutputStream(baos);
// channelssh.setCommand("lsusb > /home/pi/test1.txt");
// channelssh.setCommand("sudo reboot");
channelssh.setCommand("cat /home/pi/teplota");
channelssh.connect();
try{Thread.sleep(10000);}catch(Exception ee){};
channelssh.disconnect();
return baos.toString();
}
public void zmacklTlacitko(View view) {
final TextView Label1 = (TextView) findViewById(R.id.Label1); //Získejte ID pro textiew
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
try {
executeRemoteCommand("pi", "xxxxxx","192.168.1.5", 22);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);
Label1.setText("After Clicking");
}
}
a dole return baos.toString();
Tim padem vraci string
V tom baos je načtena ta teplota.
Jak ji dostanu do toho Label1.setText co je v tom public void zmacklTlacitko?
- PetrSmetana
- Příspěvky:313
- Registrován:pon 22. črc 2019 9:06:45
- Bydliště:Mnich
- Dal poděkování: 28 poděkování
- Dostal poděkování: 60 poděkování
- Kontaktovat uživatele:
Re: Android studio
Nech si vypsat System.out.println(baos.toString()); do komandlajny, ať víš jistě co tam máš.
Modré z nebe na počkání, zázraky do dvou dnů.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
Vim co tam mam.
Ono stači pustit Debug Shift + F9 a nechat to zastavit pod return baos.toString();
Přimo za tým přikazem se zobrazi načtena hodnota v baos.
A dole ve Variables take vidim baos = 24.4
Ono stači pustit Debug Shift + F9 a nechat to zastavit pod return baos.toString();
Přimo za tým přikazem se zobrazi načtena hodnota v baos.
A dole ve Variables take vidim baos = 24.4
- PetrSmetana
- Příspěvky:313
- Registrován:pon 22. črc 2019 9:06:45
- Bydliště:Mnich
- Dal poděkování: 28 poděkování
- Dostal poděkování: 60 poděkování
- Kontaktovat uživatele:
Re: Android studio
Tam jí dostaneš blbě, když to voláš asynchronně na pozadí Když se ti provádí metoda setText u toho labelu, tak nemáš ještě výstup u toho ssh. Je problém to volat synchronně? Pokud ano, tak si udělej fci pro překreslení tlačítka a volej jí zevnitř toho asynchronního bloku.
Modré z nebe na počkání, zázraky do dvou dnů.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
U toho druheho zdrojaku jsem psal.
Jeden buttom, při kliknuti by zavolal nějakou metodu, ta by načetla tu teplotu a vratila ji a pak by se vykreslila v tom labelu.
Potom to pujde předělat , misto buttonu timer
Jeden timer, ktery by třeba co 5 vteřin načital tu teplotu a vykresloval v labelu
Je mi uplně jedno jestli asynchronně nebo synchronně.Upozorňují, že android studio jsem viděl týden před 2 roky a týden teď a Javu neumím, takže mně berte s rezervou
Jeden buttom, při kliknuti by zavolal nějakou metodu, ta by načetla tu teplotu a vratila ji a pak by se vykreslila v tom labelu.
Potom to pujde předělat , misto buttonu timer
Jeden timer, ktery by třeba co 5 vteřin načital tu teplotu a vykresloval v labelu
- PetrSmetana
- Příspěvky:313
- Registrován:pon 22. črc 2019 9:06:45
- Bydliště:Mnich
- Dal poděkování: 28 poděkování
- Dostal poděkování: 60 poděkování
- Kontaktovat uživatele:
Re: Android studio
Dovolí ti to místo:
tohle:
Kód: Vybrat vše
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
try {
executeRemoteCommand("pi", "xxxxxx","192.168.1.5", 22);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);
Kód: Vybrat vše
try {
executeRemoteCommand("pi", "xxxxxx","192.168.1.5", 22);
} catch (Exception e) {
e.printStackTrace();
}
Modré z nebe na počkání, zázraky do dvou dnů.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
Nefunguje to a k raspi se to vubec nepřipoji.
Jsem našel na netu podle čeho jsem to dělal před těma 2 roky.
https://stackoverflow.com/questions/143 ... -with-jsch
Je tam řešeni proč nu to nejede.
Tento kód musíte spustit v jiném vlákně.
Jsem našel na netu podle čeho jsem to dělal před těma 2 roky.
https://stackoverflow.com/questions/143 ... -with-jsch
Je tam řešeni proč nu to nejede.
Tento kód musíte spustit v jiném vlákně.
- jiri.tusla
- Příspěvky:75
- Registrován:ned 08. zář 2019 15:45:09
- Dal poděkování: 8 poděkování
- Dostal poděkování: 19 poděkování
Re: Android studio
A v tom labelu se Ti text "After clicking" objeví?
Ostatně...
V asynchronním volání návratovou hodnotu z executeRemoteCommand co? Zahazuješ.
Takže si ji ulož do proměnné a tu pak nastav jako text do toho labelu. A to ještě uvnitř toho try bloku.
Nevím, jak je to na Androidu s vláknama pro manipulaci s GUI prvky.
Ve Swingu se to to muselo pustit ve SwingUtilities.invokeLater, aby se to překreslilo správně.
Ostatně...
V asynchronním volání návratovou hodnotu z executeRemoteCommand co? Zahazuješ.
Takže si ji ulož do proměnné a tu pak nastav jako text do toho labelu. A to ještě uvnitř toho try bloku.
Kód: Vybrat vše
protected Void doInBackground(Integer... params) {
try {
String temp = executeRemoteCommand("pi", "xxxxxx","192.168.1.5", 22);
Label1.setText(temp);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Nevím, jak je to na Androidu s vláknama pro manipulaci s GUI prvky.
Ve Swingu se to to muselo pustit ve SwingUtilities.invokeLater, aby se to překreslilo správně.
Dej člověku rybu a nebude mít hlad jeden den.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
Ano, objeví.
V tom asynchronním volání jsem zkoušel aaaa = new String(baos.toByteArray());
Řetězec aaa je prazdny.
Tu jsem něco našel.
https://stackoverflow.com/questions/109 ... -asynctask
V tom asynchronním volání jsem zkoušel aaaa = new String(baos.toByteArray());
Řetězec aaa je prazdny.
Tu jsem něco našel.
https://stackoverflow.com/questions/109 ... -asynctask
- jiri.tusla
- Příspěvky:75
- Registrován:ned 08. zář 2019 15:45:09
- Dal poděkování: 8 poděkování
- Dostal poděkování: 19 poděkování
Re: Android studio
Trochu si odporuješ. Jestliže v baos i ve Variable, cokoliv to v AndroidStudiu je, vidíš
správně očekávanou hodnotu, tak se musí vrátit z metody executeRemoteCommand.
Tedy ji musíš dokázat nastavit do Label1, jak jsem ve snippetu kódu navrhl.
Dej člověku rybu a nebude mít hlad jeden den.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
On je problem že to vlakno ma problem se zapisem do toho Labelu.
I tak jak jsi napsal to funguje.
String temp = executeRemoteCommand("pi", "xxxxxx","192.168.1.5", 22);
Label1.setText(temp);
Ale musim několikrat kliknout na button, než se to vykresli.
Tady s týmto zapasim.
https://stackoverflow.com/questions/148 ... 8#14827618
Uplně dole.
Kam s tým? Ten poslední patři do main activity. Ten je ok.
Ten druhy by měl jit do vlakna, ale furt tam ma chybu.
I tak jak jsi napsal to funguje.
String temp = executeRemoteCommand("pi", "xxxxxx","192.168.1.5", 22);
Label1.setText(temp);
Ale musim několikrat kliknout na button, než se to vykresli.
Tady s týmto zapasim.
https://stackoverflow.com/questions/148 ... 8#14827618
Uplně dole.
Kam s tým? Ten poslední patři do main activity. Ten je ok.
Ten druhy by měl jit do vlakna, ale furt tam ma chybu.
- jiri.tusla
- Příspěvky:75
- Registrován:ned 08. zář 2019 15:45:09
- Dal poděkování: 8 poděkování
- Dostal poděkování: 19 poděkování
Re: Android studio
A to je to, že musíš najít, jak se tohle dělá na androidu.
Nějakému GUI vláknu podáš Runnable nebo něco takového, které vytvoříš
s hodnotou získanou skrz ssh call a ono si to ve volném čase překreslí label.
Nějakému GUI vláknu podáš Runnable nebo něco takového, které vytvoříš
s hodnotou získanou skrz ssh call a ono si to ve volném čase překreslí label.
Dej člověku rybu a nebude mít hlad jeden den.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
Ja to nechci vykreslovat do labelu z toho vlakna, ale poslat načteny vysledek zpatky do toho buttonu a až pak vykreslit v labelu.
https://stackoverflow.com/questions/109 ... -asynctask
https://stackoverflow.com/questions/109 ... -asynctask
- jiri.tusla
- Příspěvky:75
- Registrován:ned 08. zář 2019 15:45:09
- Dal poděkování: 8 poděkování
- Dostal poděkování: 19 poděkování
Re: Android studio
Nechápu. Nevidím důvod. Button je UI widget s nápisem a umí se mačkat, pokud je povolený.
Buttonům by se neměly měnit texty.
Tady ^ máš nápovědu - pošli si to přes nějaký message bus mezi vlákny.
Hele, ta aplikace je v principu vícevláknová:
- hlavní vlákno - to aby běžela a neukončila se
- GUI vlákno - reaguje na klikání, psaní a podobně a taky překresluje
- ve Tvém případě je tu ještě ono asynchronní vlákno, které vykonává dlouhotrvající (obecně) činnost
- Klikneš na button a odpovídající listener (zmacklTlacitko) vytvoří a spustí AsyncTask.
- AsyncTask by měla být extendována a jako parametr předán label, kam chceš výsledek zobrazit. Tedy asi takhle
Kód: Vybrat vše
public class DisplayResult extends AsyncTask<...> { private Label destinationLabel; public DisplayResult(Label destinationLabel) { this.destinationLabel = destinationLabel; } private String result; doInBackground(){ result = jakákoliv akce vracející zrovna string } onPostExecute(){ Activity.runOnUiThread(() -> destinationLabel.setText(result)); } }
- akce se spustí a běží jako další vlákno a GUI není blokované rovněž tak hlavní vlákno není blokované
- po dokončení tasku se pustí onPostExecute, který do fronty GUI vlákna založí jinou asynchronní úlohu, která nastaví text do labelu
Dej člověku rybu a nebude mít hlad jeden den.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
Nauč jej chytat ryby a bude celý den sedět na pramici a chlastat pivo.
-
- Příspěvky:198
- Registrován:úte 13. srp 2019 8:07:32
- Dal poděkování: 1 poděkování
- Dostal poděkování: 12 poděkování
Re: Android studio
Necham to nějakou dobu uležet, už mi asi zakrněl mozek.
Dik všem za snahu pomoct.
To poslat načteny vysledek zpatky do toho buttonu jsem myslel to vratit zpatky do public void zmacklTlacitko odkud se to vlakno volalo.
Snahou tohoro všeho bylo nepouštět to vlakno přes button ale přes timet.
Volal bych AsyncTask i s přikazy.
"cat /home/pi/teplotavoda"
"cat /home/pi/teplotakotel"
atd
Timer by zavolal AsyncTas s přikazen "cat /home/pi/teplotavoda" - vratila by se mu ziskana teplota - tu by vypsal do Label1
pak by zavolal AsyncTas is přikazen "cat /home/pi/teplotakotel" - vratila by se mu ziskana teplota - tu by vypsal do Label2
atd
Dik všem za snahu pomoct.
To poslat načteny vysledek zpatky do toho buttonu jsem myslel to vratit zpatky do public void zmacklTlacitko odkud se to vlakno volalo.
Snahou tohoro všeho bylo nepouštět to vlakno přes button ale přes timet.
Volal bych AsyncTask i s přikazy.
"cat /home/pi/teplotavoda"
"cat /home/pi/teplotakotel"
atd
Timer by zavolal AsyncTas s přikazen "cat /home/pi/teplotavoda" - vratila by se mu ziskana teplota - tu by vypsal do Label1
pak by zavolal AsyncTas is přikazen "cat /home/pi/teplotakotel" - vratila by se mu ziskana teplota - tu by vypsal do Label2
atd