如何在@GET注释中动态更改值?

时间:2017-12-07 08:09:46

标签: android annotations retrofit

我正在使用Retrofit retrofit = new Retrofit.Builder() .baseUrl(Util.APK_DOWNLOAD_URL) .build(); RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class); Call<ResponseBody> request = retrofitInterface.downloadFile(); try { downloadFile(request.execute().body()); } catch (IOException e) { e.printStackTrace(); Toast.makeText(getApplicationContext(),e.getMessage(), Toast.LENGTH_SHORT).show(); } 从服务器下载APK文件。

以下是代码段。

public interface RetrofitInterface {

    @GET("development/filename.apk")
    @Streaming
    Call<ResponseBody> downloadFile();
}

并且

public static String

但是有问题。

下载APK总是与众不同。 所以

如何在

中设置一些@GET(Utils.APK_FILE_NAME)
public static String APK_FILE_NAME = ""

在我的Utils课程中

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

require_once dirname(__FILE__) . '/tcpdf/tcpdf.php';

class Pdf extends TCPDF
{
    function __construct()
    {
        parent::__construct();
    }
}

/* End of file Pdf.php */
/* Location: ./application/libraries/Pdf.php */

目前我正在

  

属性值必须为常量

3 个答案:

答案 0 :(得分:4)

您可以使用@Path注释,例如:

@GET("development/{filename}")
@Streaming
Call<ResponseBody> downloadFile(@Path("filename") String filename;

String filename;
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Util.APK_DOWNLOAD_URL)
                .build();

        RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);

        Call<ResponseBody> request = retrofitInterface.downloadFile(filename);
        try {

            downloadFile(request.execute().body());

        } catch (IOException e) {

            e.printStackTrace();
            Toast.makeText(getApplicationContext(),e.getMessage(), Toast.LENGTH_SHORT).show();

        }

答案 1 :(得分:1)

您可以将其作为参数传递给它,而不是像在

中那样在注释中声明它
public interface RetrofitInterface {
    @Streaming
    Call<ResponseBody> downloadFile(@Url String filename);
}

现在您可以使用

在运行时访问它
 Call<ResponseBody> request = retrofitInterface.downloadFile(Utils.APK_FILE_NAME);

答案 2 :(得分:1)

传递字符串的一种方法是使用@Path注释:

public interface RetrofitInterface {
  @GET("{APK_FILE_NAME}")
  Call<Users> getUsers(@Path(value = "APK_FILE_NAME", encoded = true) String apk_file_name);
}

有关详细信息,请使用以下链接, https://square.github.io/retrofit/2.x/retrofit/index.html?retrofit2/http/Path.html