逐行添加信息到ListView

时间:2014-12-11 12:34:59

标签: android listview android-arrayadapter ping

我的代码中有一点问题

我有测试IP Ping的代码

public class StartPinging extends AsyncTask<Void, Void, Void> {


    protected Void doInBackground(Void... params) {
        runOnUiThread(new Runnable() {

         @Override
         public void run() {

            try {

            Process process = Runtime.getRuntime().exec("/system/bin/ping -w 6 -c 6 " + String.valueOf(IP.getText()));
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

               while ( (temp = reader.readLine()) != null){
                   Log.e("",temp);
                   pingAdapter.add(temp);
                   pingAdapter.notifyDataSetChanged();
                 }

           reader.close();
           process.destroy();

            } catch (IOException e) {
                e.printStackTrace();
           }
        }
    });
   return null;    }}

此代码工作正常 但我希望代码逐行添加信息 就像它在“LOG”中显示的那样

但在我的代码中,应用程序冻结,直到ping完为止,然后它在ListView中一次显示所有行

有办法解决这个问题吗?

并谢谢

2 个答案:

答案 0 :(得分:1)

不要在doinbackground方法中使用runonuithread。

在Asynctask中,preExecute()和postExecute()在线程上执行,因此您可以使用它而不是runOnUiThread(), 并且doInBackGround()在工作线程上执行。

答案 1 :(得分:0)

尝试在UI线程内部仅运行相对于ui更改的部分。

    public class StartPinging extends AsyncTask<Void, Void, Void> {


        protected Void doInBackground(Void... params) {


             @Override
             public void run() {

                try {

                Process process = Runtime.getRuntime().exec("/system/bin/ping -w 6 -c 6 " + String.valueOf(IP.getText()));
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                while ( (temp = reader.readLine()) != null){
                   Log.e("",temp);
                   runOnUiThread(new Runnable() {
                       pingAdapter.add(temp);
                       pingAdapter.notifyDataSetChanged();                     
                   });
                 }

               reader.close();
               process.destroy();

                } catch (IOException e) {
                    e.printStackTrace();
               }
            }

       return null;    }}