2012-07-18 3 views
0

J'essaye de mettre à jour deux TextViews txtName et textEndName. Quand je débogue parfois, il met à jour le texte mais le reste du temps cela ne fonctionne pas. Parfois, cela fonctionne, mais pas exactement ce que c'est supposé. Quel est le problème dans le code ci-dessous?Pourquoi le texte du gestionnaire n'est pas mis à jour?

txtName = (TextView) findViewById(R.id.txtstarttag); 
    textEndName = (TextView) findViewById(R.id.txtendtag); 
    startSec = (TextView) findViewById(R.id.txtstartsecnd); 
    endSec = (TextView) findViewById(R.id.txtendsecnd); 
    btnplay = (ImageButton) findViewById(R.id.btnplay); 
    btnback = (Button) findViewById(R.id.btnback); 
    btnback.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ((MyMixes) getParent()).goBack(); 
     } 
    }); 

    btnplay.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      btnClick(); 
     } 
    }); 

    splitArray(); 

    Thread t = new Thread() 
    { 
     public void run() 
     { 
      while (isDownloading) 
      { 
       if (Data.filenames != null && Data.filenames.size() >= (getIntent() .getExtras().getInt("index") + 1) && Data.filenames.get(getIntent().getExtras() .getInt("index")) != null) 
       { 
        try 
        { 
         mediaPlayer = new MediaPlayer(); 
         mediaPlayer.setDataSource(Data.filenames.get(getIntent().getExtras().getInt("index"))); 
         mediaPlayer.prepare(); 
         mediaPlayer.start(); 
         Timer t = new Timer(); 

         handler.postDelayed(onEverySecond, 1000); 
         mediaPlayer.setOnCompletionListener(new OnCompletionListener() 
         { 
          @Override 
          public void onCompletion(MediaPlayer mp) { 
           mediaPlayer.seekTo(0); 
          } 
         }); 
         boolean isPlaying = mediaPlayer.isPlaying(); 
         if(!isPlaying){ 
          mediaPlayer.pause(); 

         } 
        } catch (IllegalArgumentException e) { 
         e.printStackTrace(); 
        } catch (IllegalStateException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } finally { 
         isDownloading = false; 
        } 
       } 
      } 
     } 
    }; 
    t.start(); 
} 

private Runnable onEverySecond=new Runnable() 
{ 
    public void run() 
    { 
     if (mediaPlayer.isPlaying()) 
     { 
      for (int i = index; i < intervals.length; i++) 
      { 
       if (i != index && mediaPlayer.getCurrentPosition() > intervals[i]) 
       { 
        index = i; 
        handler.dispatchMessage(handler.obtainMessage()); 
        handler.postDelayed(onEverySecond, 1000); 
        break; 
       } 
      } 
     } 
    } 
}; 

Handler handler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) { 
     txtName.setText(arrName.get(index)); 
     textEndName.setText(arrName.get(index+1)); 
     super.handleMessage(msg); 
    } 
}; 

public void splitArray() 
{ 

    strSplit = kggg.split("\n");// string array 
    intervals = new long[strSplit.length]; 
    Time timer; 

    for (int j = 0; j < strSplit.length; j++) 
    { 
     split = strSplit[j];// string 
     split1 = split.split("-");// string array 

     arrName.add(split1[0]); 
     String timeq = split1[1]; 

     String[] timed = timeq.split(":"); 

     if(timed.length == 3) 
     { 
      timer = new Time(Integer.parseInt(timed[0].trim()), Integer.parseInt(timed[1].trim()), Integer.parseInt(timed[2].trim())); 
      intervals[j] = timer.getTime(); 
     } 
     else if(timed.length == 2) 
     { 
      timer = new Time(0, Integer.parseInt(timed[0].trim()), Integer.parseInt(timed[1].trim())); 
      intervals[j] = timer.getTime(); 
     } 
     else if(timed.length == 1) 
     { 
      timer = new Time(0, 0, Integer.parseInt(timed[0].trim())); 
      intervals[j] = timer.getTime(); 
     } 
    } 

    for (int j = intervals.length-1; j >= 0 ; j--) 
    { 
     intervals[j] = intervals[j] - intervals[0]; 
    } 
} 
public void btnClick() 
{ 
    k++; 
    k = k % 2; 
    startSong(k); 
} 
private void startSong(int i) { 
    if (i == 1) { 
     System.out.println("11111" + i); 
     btnplay.setImageResource(R.drawable.pause); 
     try { 
      System.out.println("start try chech------"); 
      mediaPlayer.start(); 
     } catch (Exception e) { 
      mediaPlayer.pause(); 
     } 
    } 
    if (i == 0) { 
     btnplay.setImageResource(R.drawable.play); 
     mediaPlayer.pause(); 
     System.out.println("00000" + i); 
    } 
} 

Répondre

0

Vous ne devriez pas faire ceci:

handler.dispatchMessage(handler.obtainMessage()); 

Essayez ceci:

handler.sendMessage(handler.obtainMessage()); 

EDIT: autres ajoutai-je remarqué

Je vois aussi que dans votre discussion vous avez une boucle while (isDownloading) et vous réglez isDownloading à false dans le bloc finally. Cette boucle ne fonctionne jamais plus d'une fois.

En outre, vous

btnplay.setImageResource(R.drawable.play); 

dans un thead. Ce n'est pas bon. Vous devez faire tout ce qui est lié à l'interface utilisateur sur le thread principal (UI).

+0

Cela ne fonctionne pas ........... – bkshukla

+0

s'il vous plaît ajouter un enregistrement de débogage de sorte que vous pouvez dire si le Runnable est exécuté plusieurs fois et aussi si la méthode handleMessage() est appelée –

+0

Quand Je débogue alors tout fonctionne bien mais quand je cours le même morceau de code les textes ne sont pas mis à jour. S'il vous plaît suggérer quoi faire? J'utilise la minuterie dans un fil, est-ce que c'est quelque chose à voir avec ça? – bkshukla

Questions connexes