2

我的线程无法正常工作。它每 3 秒执行一次方法中的所有代码,RepeatingThread()但不是方法中的所有代码。run()我究竟做错了什么?

这是代码:

public RepeatingThread rt;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Log.e(LOG_TAG, "Start Repeat Thread");
    //rt = new Thread(new RepeatingThread());
    rt = new RepeatingThread();
    rt.start();
    Log.e(LOG_TAG, "Started Repeat Thread");
}

public class RepeatingThread implements Runnable {

    private final Handler mHandler = new Handler();
    private int len = 0; 


    private byte[] input = new byte[len];


    public RepeatingThread() {
        //try {
        Log.e(LOG_TAG, "Before inputJSON String");
        //inputJSON = dataInputStream.readUTF();
        //URL url = new URL("tcp://23.23.175.213:1337");
        //inputJSON = dataInputStream.readUTF();
        //inputstrrd = new InputStreamReader(socket.getInputStream());
        String hello = "hello world";
        //String inputJSON = getStringFromBuffer(new InputStreamReader(socket.getInputStream()));

        //Convert 
        Log.e(LOG_TAG, "After inputJSON String:" + inputJSON); 
        /*}
         catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }*/

        //LOOK HERE FIRST  
        //inputJSON is what is received back from the server - Take the inputJSON 
        //String and use regular expressions HERE to remove all the other characters in the 
        //string except the payload JSON.
        //refreshViewModels(inputJSON);
    }

    @Override
    public void run() { 
        try {
            Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON");
            //outputstrwr.write(outputJSONserv);  //UNCOMMENT IF NEED TO SEND DATA TO GET JSON BACK
            //inputJSON = ConvertByteArrayToString(getBytesFromInputStream(inputStr));
            inputJSON = ConvertByteArrayToString(getFileBytes(inputStr));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON2:" + inputJSON);
        refreshViewModels(inputJSON);
        mHandler.postDelayed(this, 3000);       
    }
}
4

2 回答 2

2

您需要扩展 Thread 而不是实现 Runnable 接口:

public class RepeatingThread extends Thread{
//.....
}
于 2012-08-27T15:14:39.040 回答
1

您可能应该将 aTimer用于这种简短的重复任务:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TimerTask task = new RepeatingTask();
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(task, 0, 3000);
}

public class RepeatingTask extends TimerTask {

 private int len = 0; 

 private byte[] input = new byte[len];


 public RepeatingTask() {
     //try {
        Log.e(LOG_TAG, "Before inputJSON String");
        //inputJSON = dataInputStream.readUTF();
        //URL url = new URL("tcp://23.23.175.213:1337");
        //inputJSON = dataInputStream.readUTF();
        //inputstrrd = new InputStreamReader(socket.getInputStream());
        String hello = "hello world";
        //String inputJSON = getStringFromBuffer(new InputStreamReader(socket.getInputStream()));

        //Convert 
        Log.e(LOG_TAG, "After inputJSON String:" + inputJSON); 
     /*}
     catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     }*/

     //LOOK HERE FIRST  
     //inputJSON is what is received back from the server - Take the inputJSON 
     //String and use regular expressions HERE to remove all the other characters in the 
     //string except the payload JSON.
     //refreshViewModels(inputJSON);
 }

 @Override
 public void run() { 
      try {
          Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON");
          //outputstrwr.write(outputJSONserv);  //UNCOMMENT IF NEED TO SEND DATA TO GET JSON BACK
          //inputJSON = ConvertByteArrayToString(getBytesFromInputStream(inputStr));
          inputJSON = ConvertByteArrayToString(getFileBytes(inputStr));
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }

      Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON2:" + inputJSON);
      refreshViewModels(inputJSON);
 }

}

在您的代码中,您混合了线程模式(从 start() 方法开始)和处理程序,这有点令人困惑。

于 2012-08-27T15:07:53.307 回答