Reputation: 429
I'm building an android app using JSCH library to execute a command in a remote linux server, and then read its output.
I followed the answer of this question, but didn't solve my problem.
The following is my activity code:
package com.example.pic_controller_2;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.ChannelSftp;
import android.view.View;
import android.os.AsyncTask;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class TestActivity extends AppCompatActivity {
private String aaaa;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public void show_picture_func (View v) {
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
String SFTPHOST = "192.168.0.1";
int SFTPPORT = 22;
String SFTPUSER = "pi";
String SFTPPASS = "raspberry";
String SFTPWORKINGDIR = "/home/pi/pic/";
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
try {
JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
session.setPassword(SFTPPASS);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(10000);
session.connect();
ChannelExec channel1 = (ChannelExec)session.openChannel("exec");
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
channel1.setOutputStream(baos);
channel1.setCommand("ls /home/pi/pic | sed -n 5p");
aaaa = new String(baos.toByteArray());
} catch (Exception ex) {
ex.printStackTrace();
Toast.makeText(getApplicationContext(), "Error Connecting", Toast.LENGTH_LONG).show();
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
TextView textView1_2 = (TextView)findViewById(R.id.textView1);
textView1_2.setText(aaaa);
}
}.execute(1);
}
}
So, the output of the executed command should appear in the textview. But it doesn't. The textview changes to white!
Any suggestions !?
Upvotes: 0
Views: 1188
Reputation: 429
I changed the following section of the code, from this:
ChannelExec channel1 = (ChannelExec)session.openChannel("exec");
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
channel1.setOutputStream(baos);
channel1.setCommand("ls /home/pi/pic | sed -n 5p");
aaaa = new String(baos.toByteArray());
to this:
ChannelExec channel1 = (ChannelExec)session.openChannel("exec");
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
channel1.setOutputStream(baos);
channel1.setCommand("ls /home/pi/pic | sed -n 5p | xargs echo -n");
channel1.connect();
try{Thread.sleep(1000);}catch(Exception ee){}
aaaa = new String(baos.toByteArray());
And the problem solved.
Upvotes: 1