1

イーサネットメッセージを送信するためにAsyncTaskを拡張するクラスがあります。MainActivity内で作成して呼び出すと、正常に機能します。

new SendCommandTask(MainActivity.this).execute(ipAddress, portNum, message);

ただし、代わりにこれを新しいクラスのメソッド内に埋め込みたいと思います...

public class NewClass{

   String ipAddress;
   String portNum;
   String command;

   public NewClass(String ip, String pn, String, c){
      ipAddress = ip;
      portNum = pn;
      command = c;
   }
   public send(){
      SendCommandTask(MainActivity.this).execute(ipAddress, portNum, command);
   }
}

...そしてMainActivityから直接メソッドを呼び出します:

NewClass newClass = new NewClass;    
NewClass.send();

コンストラクターで別のパラメーターとしてアクティビティーを渡そうとしましたが、それを行うとメソッドが吐き出します。NewClassで呼び出し元のアクティビティを参照する別の方法はありますか?または、MainActivityからAsyncTaskを実行し続けていますか?(これが理にかなっていることを願っています。私は一般的にJavaおよびOOプログラミングに非常に慣れていません。)どんな助けでも大歓迎です!

4

2 に答える 2

1

数日前に書いたこの回答をご覧ください。ここにも当てはまると思います。主な追加の考慮事項は、AsyncTaskがその呼び出し元のアクティビティよりも長生きできる必要があるかどうかです。アクティビティが閉じられるか再開される可能性がある場合は、onStop()でタスクを強制終了するか、共有フィールドを使用しないように注意してください。

AsyncTaskが、渡すアクティビティの一部であるメンバーを直接読み取る場合は、それをアクティビティ内に保持することもできます。タスクを独立したクラスに分解することは、タスクを独立させ、複数のアクティビティクラスで動作できるようにする場合に最適です。

また、アクティビティではなくサービスで作業を行うことを検討してください。私はIntentServiceの大ファンです。

于 2012-09-05T22:17:31.077 に答える
0

新しいクラスのコンストラクターで、前のアクティビティをコンテキストとして渡すことを試みることができます。

public NewClass(Context mainActivity, String ip, String pn, String, c)

うまくいくかもしれませんが、少しハッキーなようです。

于 2012-09-05T22:14:42.607 に答える