Androidのアプリ開発関連のブログ

昨日の続きで非同期でSSH

昨日のSSHがうまく行かなかったのは、最後UIスレッドで通信しようとしてるからじゃないか?
ってことに気づいたんで、今ちょっと試した。

昨日はganymed-ssh-2の
conn.connect();
で例外が発生してる気配だったが、
AsyncTaskLoaderでやってみたら。この行は突破できたぽい。

だが、SSHはつなぎっぱでコマンド送るもんだから、
非同期処理したままUIスレッドに結果を送り続けなければいけない。
が、LoaderManager.LoaderCallbacksではonLoadFinishedで完了時のデータ受け取る以外に何も受け取れないのね・・・


前にお蔵入りしたアプリでAsyncTaskを使ったことがあるが、AsyncTaskには途中経過を受け取る機能があるようなんだが、
AsyncTaskだとActivityがonCreateされるとAsyncTaskも初期化されちゃうらしい。それはそれで困るな・・・

AsyncTaskLoader側から一時的に処理を止めてUIの操作とかはできそうだから、
次回はそっち方向でUIスレッドの変更をやってみたいと思う。

コード量は多くならなそうだが、めんどいな。

UIスレッドで接続しようとしてるからかもしれん・・・

jsch使ってSSHしようとしたらよくわからん例外出てダメだったが、ganymed-ssh-2の方も試してみた。


ganymed-ssh-2のビルド方法がわからなかったが、
android create lib-project
でライブラリ用のプロジェクトを作成して、srcにソースを全部コピー。

アプリのプロジェクト側で、project.propertiesに、
android.library.reference.1=../ganymed-ssh-2
って感じで作成したlib-projectへの相対パス書いたら使えたぽい。


で、ganymed-ssh-2の方で試してみたんだが、こっちも、
conn.connect();
でそれっぽいの出力されないが何か例外発生しちゃってる。

お手上げか・・・
と思ったんだが、これUIスレッドで通信しようとして例外発生してるのかもしれんことに気づいた。
時間かかっちゃったから明日非同期で試してみる。


今日はjschもganymed-ssh-2も全く動かなかったが、
jschの方はInputStreamとOutputStreamを設定して勝手に読み書きする感じぽいが、
ganymed-ssh-2の方はInputStreamを取得して、それがサーバーからのレスポンスみたい。
jschの方はOutputStreamがレスポンスと判断したんだが、それだとメモリで読み取ろうとすると排他処理が必要なはずで無理ぽい気が・・・
ganymed-ssh-2の方はInputStreamなんで、1行ずつ読み取りができるから排他処理が不要。
と思ったんだが、jschの方、InputStreamとOutputStream逆に判断してるような・・・
JavaのInputStreamとOutputStreamは単純なファイル読み書き以外で使うとどっちがどっちだかわからんわ。

ちょっと使った感じだと、ganymed-ssh-2の方がわかりやすいかなーって感じ。
まあ、続きは明日試す。
非同期で通信できないようならお手上げだな。

jschだめぽい・・・

AndroidでSSHするアプリ作ろうとしていてjschってライブラリ使おうと思ってたが、
session.connect();

E/ThrottleService( 1195): problem during onPollAlarm: java.lang.IllegalStateException: problem parsing
stats: java.io.FileNotFoundException: /proc/net/xt_qtaguid/iface_stat_all: open failed: ENOENT (No su
ch file or directory)
こんな感じで例外出ちゃってるぽくてダメだわ・・・

なんかシステムファイルがない感じ?