#java #android
public class MainActivity extends AppCompatActivity { int a; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button get_string_button = (Button) findViewById(R.id.get_string_button); Button get_screen_button = (Button) findViewById(R.id.get_screen_button); final SenderThread senderThread = new SenderThread(); View.OnClickListener onClickListener = new View.OnClickListener() { String line; Toast toast; @Override public void onClick(View view) { try { switch (view.getId()){ case R.id.get_string_button: senderThread.execute("getRandomNumber"); line = senderThread.get(); toast = Toast.makeText(getApplicationContext(), line, Toast.LENGTH_LONG); toast.show(); break; case R.id.get_screen_button: senderThread.execute("getScreen"); line = senderThread.get(); toast = Toast.makeText(getApplicationContext(), line, Toast.LENGTH_LONG); toast.show(); break; } } catch (InterruptedException e) { Toast toast = Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG); toast.show(); } catch (ExecutionException e) { e.printStackTrace(); } } }; get_string_button.setOnClickListener(onClickListener); get_screen_button.setOnClickListener(onClickListener); } } SenderThread class SenderThread extends AsyncTask{ private Socket socket; InputStream sin; OutputStream sout; DataInputStream in; DataOutputStream out; CloseSocket closeSocket = new CloseSocket(); @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... params) { String line; String command = params[0]; try{ socket = new Socket(ip, 6666); sin = socket.getInputStream(); sout = socket.getOutputStream(); in = new DataInputStream(sin); out = new DataOutputStream(sout); if(socket.isConnected()) { out.writeUTF(command); out.flush(); line = in.readUTF(); closeSocket.close(in,out,socket); return line.toString(); }else{ throw new Exception("Socket not alive!"); } }catch(Exception ex) { return ex.toString(); } } } logcat E/AndroidRuntime: FATAL EXCEPTION: main Process: com.lordradix.client, PID: 21168 java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once) at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:605) at android.os.AsyncTask.execute(AsyncTask.java:560) at com.lordradix.client.MainActivity$1.onClick(MainActivity.java:44) at android.view.View.performClick(View.java:6261) at android.widget.TextView.performClick(TextView.java:11159) at android.view.View$PerformClick.run(View.java:23748) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
Ответы
Ответ 1
Точно не помню, но по моему один экземпляр AsyncTask нельзя использовать дважды. Создайте другой экземпляр для второго клика, так например: switch (view.getId()){ case R.id.get_string_button: SenderThread senderThread = new SenderThread(); senderThread.execute("getRandomNumber"); line = senderThread.get(); toast = Toast.makeText(getApplicationContext(), line, Toast.LENGTH_LONG); toast.show(); break; case R.id.get_screen_button: SenderThread senderThread = new SenderThread(); senderThread.execute("getScreen"); line = senderThread.get(); toast = Toast.makeText(getApplicationContext(), line, Toast.LENGTH_LONG); toast.show(); break; } Вам компилятор подсказывает: the task has already been executed (a task can be executed only once) То есть задача уже выполнена (задача может быть выполнена только один раз)
Комментариев нет:
Отправить комментарий