-2

以下代码中的正确方法是什么(对我来说结构有点复杂)从方法 gotUrl() 获取 url 到 AsyncTask 的 doInBackground() 方法,以便在 doInBackground() 之后在 onPostExecute() 中使用它方法已经完成了它的任务?

public class PlayerActivity extends CustomActivity implements 
                                              ProblemListener{

     public class PlayChannel extends 
                      AsyncTask<CustomChangeChannel, String, String> {

          @Override
          protected String doInBackground(CustomChangeChannel... params) {
                 initOctoshapeSystem();

          return url;
          } 

          @Override
          protected void onPostExecute(String url){ 

          }

     }


     public void initOctoshapeSystem() {
           os = OctoStatic.create(this, this, null);

           os.setOctoshapeSystemListener(new OctoshapeSystemListener() {

                @Override
                public void onConnect() {
                     mStreamPlayer = setupStream(OCTOLINK);
                     mStreamPlayer.requestPlay();
                }
          });
     }



     public StreamPlayer setupStream(final String stream) {
        StreamPlayer sp = os.createStreamPlayer(stream);
        sp.setStatusChangedListener(new StatusChangedListener() {
            @Override
            public void statusChanged(byte oldStatus, 
                                      final byte newStatus) {
                runOnUiThread(new Runnable() {
                   @Override
                   public void run() {
                    //todo
                   }
                });
             }
        });

        sp.setListener(new StreamPlayerListener() {

            @Override
            public void gotUrl(String url) {
                //String to be passed
            }
        });

     return sp;
     }
}
4

2 回答 2

3
AsyncTask<Param1, Param2, Param3>

参数 1 是您传递给 doInBackground 方法的参数。

Param 2 是您在 AsyncTask 工作时想要得到的。

参数 3 是您想要得到的结果。

您可以将它们全部声明为无效。

AsyncTask<Void, Void, Void>

在您的情况下,您希望将字符串 URL 传递给您的 doInBackground,因此:

AsyncTask<String, Void, Void>

调用执行时传递您的 URL 字符串。

mAsyncTask.execute("your url");

然后在 doInBackground 中获取它:

protected Void doInBackground(String... params) {
    String yourURL = params[0];
    return null;
}
于 2016-11-18T06:59:34.183 回答
0

改变这个

 public class PlayChannel extends 
                  AsyncTask<CustomChangeChannel, String, String>

对此

 public class PlayChannel extends 
                  AsyncTask<String, String, String>

然后使用

PlayChannel channel  = new PlayChannel(url);
于 2016-11-18T06:49:17.393 回答