Ich bin neu in AsyncTask und das ist das erste Mal, dass ich es benutze. Was ich versuche zu erreichen, ist folgendes: Ich möchte eine Aktivität haben, die eine Schaltfläche und eine Textansicht hat. Wenn ich den Knopf drücke, macht die App eine SSH-Verbindung im Hintergrund und verbindet sich mit meinem Raspberry Pi. Es führt ein paar Python-Skripte aus und lädt sie in Dropbox hoch.Was sind die Parameter in asynctask in diesem Fall?
Wenn es fertig ist, warnt die Textansicht, dass ich meine Datei in Dropbox finden kann, da der Upload abgeschlossen war. Wenn ich recht habe, sollte ich nichts in die AsyncTask-Parameterliste schreiben oder soll ich?
Abgesehen von der Argumentliste, gibt es auf meinem Code mehr zu tun?
Vielen Dank im Voraus!
public class Aszin extends AppCompatActivity {
String cmd = "python /home/pi/Desktop/get_db_pic.py";
private static String USERNAME = "piro"; // username for remote host
private static String PASSWORD = "password"; // password of the remote host
private static String host = "192.168.xx.xx"; // remote host address
private static int port = 22;
TextView tv1;
Button btn_ssh;
private AsyncTask<String, Integer, ???> asyncTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aszin);
tv1 = (TextView) findViewById(R.id.tv1);
tv1.setText("default");
btn_ssh = (Button) findViewById(R.id.btn1);
btn_ssh .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
connect2pi(cmd);
}
});
}
public void connect2pi(final String cmd){
asyncTask = new AsyncTask<String, Integer, ??>() {
@Override
protected void doInBackground() {
List<String> result = new ArrayList<String>();
try {
JSch jsch = new JSch();
Session session = jsch.getSession(USERNAME, host, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(PASSWORD);
session.connect();
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
InputStream in = channelExec.getInputStream();
channelExec.setCommand(cmd);
channelExec.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
result.add(line);
}
channelExec.getExitStatus();
channelExec.disconnect();
session.disconnect();
} catch (Exception e) {
System.err.println("Error: " + e);
}
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
tv1.setText("your file has been downloaded");
btn_ssh.setEnabled(true);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
tv1.setText("your file is getting downloaded");
btn_ssh.setEnabled(false);
}
};
asyncTask.execute(cmd);
}
}
Werfen Sie einen Blick auf [Dies] (https://stackoverflow.com/a/29559386/6950238) Antwort –