【发布时间】:2017-03-09 09:22:28
【问题描述】:
我从 sshconnection 创建一个扩展 AsyncTask 类的对象时遇到问题..
我的班级如下
public class sshconnection extends AsyncTask<String, Void, String> {
ByteArrayOutputStream baos;
protected String doInBackground(String... params) {
try {
String results;
JSch jsch = new JSch();
Session session = jsch.getSession(User, IP, Port);
session.setPassword(Pass);
// Avoid asking for key confirmation
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
session.connect();
ChannelExec channel = (ChannelExec)session.openChannel("exec");
InputStream in = channel.getInputStream();
baos = new ByteArrayOutputStream();
channel.setOutputStream(baos);
channel.setCommand(CMD);
channel.connect();
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
channel.disconnect();
session.disconnect();
return baos.toString();
} catch (Exception e) {
//Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
//System.out.println(e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TextView txt = (TextView) findViewById(R.id.txtipinfo);
// txt.setText("Executed");
Toast.makeText(MainActivity.this, baos.toString(), Toast.LENGTH_LONG).show();
}
}
这是我在按钮点击中调用它的时候
btn = (Button) findViewById(R.id.button_conn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CMD = "ls";
new sshconnection().execute(User,Pass,IP,CMD);
}
});
直到这里我的代码工作正常,我可以与我的服务器建立 ssh 连接。
我的问题是我想从 sshconnection 类创建一个对象以将其发送到另一个活动,以重用 ssh 的连接将其他 ssh 命令发送到我的服务器。
如果有另一种方法可以做到这一点,即使我必须更改 AsyncTask 类.. 或者使用其他东西,比如新线程。 请告诉我如何做到这一点以及我在哪里更改我的代码。
非常感谢大家。
【问题讨论】:
-
一个异步任务实例只能使用/执行一次。
-
Asynctask 是一个线程,而不是一个对象。你不能发送它。
-
@FlorescuGeorgeCătălin 这是我们正在谈论的 Java - 除了原语之外的所有内容都是对象。线程是一个对象。绝对可以传递 AsyncTask 对象,但无法更新它执行的后台线程。
标签: android android-studio ssh android-asynctask