Handler myHandler = new Handler() {  
    public void handleMessage(Message msg) {   
         switch (msg.what) {   
              case 1:   
                 
               SharedPreferences  share=getSharedPreferences("save",MODE_WORLD_READABLE);
               SharedPreferences.Editor  editor=share.edit();
                  editor.clear();
                  editor.putString("fileName", SaveDialog.file_name);
                  editor.putInt("total", listStr.size());
                  Log.i("XML", "listStr.size="+listStr.size());
                  for(int i=0;i<listStr.size();i++)
                  {
                  editor.putString("sentence"+i,listStr.get(i));
                  }
               editor.commit();
               
               sdialog.dismiss();
               Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show();
               listStr.clear();
               msg.what=0;
               SaveDialog.isSave=0;
               Log.i("XML", "SaveDialog.isSave="+SaveDialog.isSave);
                   break;   
               default:break;    
         }   
         super.handleMessage(msg);   
    }   
    
};
class myThread implements Runnable {   
    public void run() {  
         while (true) {    
                 
              Message message = new Message();   
             
              if(SaveDialog.isSave==1)
              {
               Log.e("XML", "SaveDialog.isSave="+SaveDialog.isSave);
               message.what = SaveDialog.isSave;   
                 Sentences.this.myHandler.sendMessage(message);
              }
              SaveDialog.isSave=0;
              try {   
                   Thread.sleep(500);    
              } catch (InterruptedException e) {   
                   Thread.currentThread().interrupt();   
              }   
         }   
    }   
}Handler

解决方案 »

  1.   

    Log.i("XML", "listStr.size="+listStr.size()); 对么
      

  2.   

    嗯,在程序中的下面代码的地方确实保存了数据,可是这个Log.i("XML", "listStr.size="+listStr.size());输出的结果为0,
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);


     ViewHolder holder = (ViewHolder) v.getTag();  
             holder.cb.toggle();// 在每次获取点击的item时改变checkbox的状态  
             
             MyAdapter.isSelected.put(position, holder.cb.isChecked());
             if (holder.cb.isChecked() == true) {  
                 listStr.add(list.get(position).get("item_tv").toString());  
             } else {  
                 listStr.remove(list.get(position).get("item_tv").toString());  
             }  
             Log.e("XML", "listStr.size="+listStr.size());
             
    }
      

  3.   

    listStr 中没有数据呗,肯定就没保存
      

  4.   

    如果listStr确实有获得数据的话 呐Log.e("XML", "listStr.size="+listStr.size());这句话打印就卜该为0的 直接输出listStr的值  看下 是否真的有添加成功...
      

  5.   

    就是直接输出listStr有值,在handler保存数据的时候输出没有值了
      

  6.   

    你一步一步的调试 看看 listStr在什么地方没啦值 按说是卜该的 listStr是全局的么
      

  7.   

    listStr是全局变量,貌似Handler很难控制
      

  8.   

    listStr.clear();
    msg.what=0;
    SaveDialog.isSave=0;
    如果有线程没有结束,或同时有多个线程,可能会造成上面几个值被清除,线程应当做一些处理
      

  9.   

    如果不写listStr.clear();还是会出现数据为0的情况,Handler实在不好控制
      

  10.   

    if语句使用的太多了,改用switch语句,去掉Handler也可以实现,问题解决了,不过关于Handler的使用还得好好研究一下,谢谢各位了