【问题标题】:[Android]Update textview from another class running on asynctask?[Android]从运行在 asynctask 上的另一个类更新 textview?
【发布时间】:2016-07-12 02:36:01
【问题描述】:

我的问题是,我有我的主课,她命令运行带有 URL 音频的 AyncTask,最后重新播放下一个音频,我的问题是,我的播放器在另一个类中,因为我这样做了每次播放歌曲的url都会更新的TextView? 这是我的代码:

活动主要: 异步任务

public class Repoduce extends AsyncTask<String, Integer, String> {
    @Override
    protected void onPreExecute() {
        //mostrarNotificacion("Reproduciendo...");
    }

    @Override
    protected String doInBackground(String... strings) {
        String url = strings[0];
        try {
            PlayAudioManager.playAudio(getApplicationContext(), url, Lista);
            runOnUiThread(new Runnable() {
                              @Override
                              public void run() {
                                  //titulo.setText(guardaDatos.getArtista());
                                  titulo_cancion.setText(guardaDatos.getArtista());
                                  Picasso.with(getApplicationContext()).load(guardaDatos.getCoverURL()).into(caratula);
                              }
                          }

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

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
    }
}

这里有媒体播放器类

 public static void playAudio(final Context context, final String url, String currentTrack) throws Exception {
    mmr = new FFmpegMediaMetadataRetriever();
    listaReproduccion a = new listaReproduccion(context);
    //am = MusicPlayer.getAm();
    //am.setMode(AudioManager.STREAM_MUSIC);
    codigos = a.getArray("Codigos");
    nombres = a.getArray("Nombres");
    artista = a.getArray("Artista");
    //guardaDatos.setArtista(nombres.get(cancion));
    setIsPlaying(true);

                mediaPlayer = MediaPlayer.create(context, Uri.parse(codigos.get(cancion)));
                //coverDeezer.caratulaArtista(artista.get(cancion));
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        if (cancion <= codigos.size()) {
                            try {
                                cancion++;
                                playAudio(context, "", "lista");
                                Log.i("CONTADOR2", String.valueOf(cancion));
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }

我在activityclass中有textview,如何从class player自动更新这个?

【问题讨论】:

  • 将TextView作为参数传递给playAudio 方法
  • 不起作用... :( W/System.err: android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能接触其视图。

标签: java android android-asynctask textview


【解决方案1】:

如果您想在另一个活动中更新 textview,我认为您有以下一些解决方案:

1 - 创建接口监听器捕获事件更改音频以更新 TextView。

2 - 使用广播接收器。

3 - 使用处理程序消息。

【讨论】:

    【解决方案2】:

    在 Acitivity 的(内部类)中创建 AsyncTask 并在 onPostExecute() 方法中调用 .setTex()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多