私は何をしようとしているのか分かりませんが、私はそれに行くでしょう: 私の電話はクライアントとして機能し、データを送信する必要がありますサーバーへのモーションイベントについて AsyncTaskとの通信を処理しているので、私はAsyncTaskクラスの中でonTouchメソッドを実装したいと思います。 私のAsyncTaskはView.OnTouchListenerを実装しましたが、イベントは実際には私のAsyncTask内のonTouchメソッドに到達していません。 私はここでAndroid:UI以外のスレッドからonTouchイベントを処理する
がAsyncTaskコードです..私は非常に基本的な何かが欠けていることを推測している:
public class tpAsyncTask extends AsyncTask<String,String,String> implements View.OnTouchListener {
Context context;
boolean isCancelled = false;
float prevX;
float prevY;
Socket socket;
ObjectOutputStream oos;
private final static String TAG = "ME ASYNCTASK LOGGER: ";
public tpAsyncTask(Context context){
this.context = context;
}
@Override
protected String doInBackground(String... strings) {
String IP = strings[0];
String port = strings[1];
try {
InetAddress inetAddress = InetAddress.getByName(IP);
socket = new Socket(inetAddress,Integer.parseInt(port));
OutputStream os = socket.getOutputStream();
oos = new ObjectOutputStream(os);
while(!isCancelled()) {
Thread.sleep(1000);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
try {
oos.flush();
oos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// PROBLEM IS THAT THE APP NEVER REACH HERE
if(!isCancelled()) {
switch(motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
{
Log.d(TAG, "ACTION MOVE IS PREFORMED");
}
case MotionEvent.ACTION_DOWN:
{
Log.d(TAG, "ACTION DOWN IS PREFORMED");
}
}
}
return false;
}}
おかげ
を解決しEDIT:
男の多くonTouchの実装を特定のビューにアタッチする必要がありました。 そのため、画面のサイズをすべて入れるためにonTouchイベントが必要なので、単純に相対レイアウトのオブジェクトを作成し、asyncTask(OnTouchListenerを実装する)のコンストラクタに渡し、コンストラクタでmyRelativeLayout.setOnTouchListerner(this)
を設定しました。 これは、画面に触れるたびにasyncTask内のトリック - オンタッチメソッドが呼び出されるようになりました。
ありがとうございます。
PostExecute()のonTouchListener()を設定してください –