0

サーバー (PC) からクライアント (Android) に、たとえば 5 分ごとにファイルを転送する必要があるプロジェクトがあります。私の問題は、ファイルを初めて送信できることです。次に、私の方法を飛び越えます。onClick がサーバーからファイルを取得するボタンを設定します。初めてクリックしたときはうまくいきましたが、次に例外があります:

09-11 11:02:55.578: E/AndroidRuntime(13472): FATAL EXCEPTION: main
09-11 11:02:55.578: E/AndroidRuntime(13472): java.lang.IllegalStateException: Cannot execute task: the task is already running.
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:538)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.os.AsyncTask.execute(AsyncTask.java:499)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at com.aaandroid.MainActivity$3.onClick(MainActivity.java:63)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.view.View.performClick(View.java:3100)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.view.View$PerformClick.run(View.java:11644)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.os.Handler.handleCallback(Handler.java:587)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.os.Looper.loop(Looper.java:126)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at android.app.ActivityThread.main(ActivityThread.java:3997)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at java.lang.reflect.Method.invokeNative(Native Method)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at java.lang.reflect.Method.invoke(Method.java:491)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
09-11 11:02:55.578: E/AndroidRuntime(13472):    at dalvik.system.NativeStart.main(Native Method)

私のサーバー:

public class TCPServer  {
  public static void main(String args[]) throws IOException {
    // create socket
    ServerSocket servsock = new ServerSocket(64500);
    // declaring files
    while (true) {
      System.out.println("Waiting...");
      Socket sock = servsock.accept();
      System.out.println("Accepted connection : " + sock);
      // sendfile
      File myFile = new File("text.txt");

      // File
      int count;
      byte[] buffer = new byte[1024];
      OutputStream out = sock.getOutputStream();
      BufferedInputStream in = new BufferedInputStream(new FileInputStream(myFile));
      while ((count = in.read(buffer)) > 0) {
        out.write(buffer, 0, count);
        out.flush();
        out.close();
   //     sock.close();
      }
    }
  }
}

私の顧客

class TCPClient extends AsyncTask <Void, Void, Void>{

  private final static String serverIP = "10.96.x.zzz";

  private final static int serverPort = 64500;
  private final static String inputFile = "/mnt/sdcard/Text.txt";

  /**
   * @see android.os.AsyncTask#doInBackground(Params[])
   */
  protected Void doInBackground(Void... params) {
    int filesize = 512; // filesize temporary hardcoded
    long start = System.currentTimeMillis();
    int bytesRead = 0;
    int current = 0;
    // localhost for testing
    try {
    Socket sock = new Socket (serverIP,serverPort);
    FileOutputStream fos = new FileOutputStream(inputFile);
    BufferedOutputStream out = new BufferedOutputStream(fos);
    byte[] buffer = new byte[1024];
    int count;
    InputStream in = sock.getInputStream();
    while((count=in.read(buffer)) >0){
        fos.write(buffer);
    }
    out.close();
    fos.flush();
    fos.close();
    sock.close();
    } catch (IOException e) {
      // TODO Add your own exception handling here, consider logging
      e.printStackTrace();
    }
    return null;
  }
}

何か案は ?繰り返しますが、スケジュールされた時間にファイルを送信できないという問題があり、ファイルが初めて送信されますが、次に、タスクが既に実行されているという例外が発生します。MainActivity 63 で doinbackground を実行しています。しかし、私は execute(); を使用します。アドバイスありがとう!

4

1 に答える 1

0

AsyncTask javadocによると:

タスクは 1 回だけ実行できます (2 回目の実行を試みると、例外がスローされます)。

TCPClientクラスのインスタンスを複数回実行しようとしていると思います。

(これは推測です...しかし、タスクを実行するコードを質問に含めていません。)

于 2013-09-11T11:15:08.323 に答える