Итак, у меня есть 3 фрагмента с именами MainTab, WiFiTab и CustomOVPNTab
На 1-й вкладке, которая является MainTab, я использую JSCH для захвата выходной команды и установки ее в EditText, вот код:
getLogs.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
try {
executeSSHcommand(mainActivity.user, mainActivity.pass, mainActivity.host, mainActivity.port, "cat /etc/openvpn/server.ovpn");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);
}
});
public void executeSSHcommand(String user, String password, String host, int port, String command)
{
JSch lJSCH;
Session lSession;
lJSCH = new JSch();
String CommandOutput = null;
try
{
lSession = lJSCH.getSession(user, host, port);
lSession.setConfig("StrictHostKeyChecking", "no");
lSession.setPassword(password);
lSession.connect();
ChannelExec lChannelExec = (ChannelExec)lSession.openChannel("exec");
lChannelExec.setCommand(command);
((ChannelExec)lChannelExec).setErrStream(System.err);
InputStream ins=lChannelExec.getInputStream();
lChannelExec.connect();
byte[] tmp=new byte[1024];
while(true)
{
while(ins.available()>0) {
int i = ins.read(tmp, 0, 1024);
if (i < 0) break;
getOutput.setText(new String(tmp, 0,i));
}
if(lChannelExec.isClosed())
{
if(ins.available()>0) continue;
getOutput.setText("exit-status: "+lChannelExec.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
lChannelExec.disconnect();
lSession.disconnect();
}
catch(Exception e)
{
}
}
Это только установит текст в getTutput MainTab, если я щелкну фрагмент CustomOVPNTab и вернусь к фрагменту MainTab, в CustomOVPNTab нет ничего особенного, нет написанных просто кодов, но я должен сначала щелкнуть его до того, как getOutput установил текст в MainTab, почему это так??Спасибо!