2017-12-07 6 views
-1

サーバーからAPKファイルをダウンロードするのにRetrofitを使用しています。@GETアノテーションで値を動的に変更するにはどうすればよいですか?

以下はコードスニペットです。

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(); 

     } 

そして

public interface RetrofitInterface { 

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

しかし、問題があります。

ダウンロードAPKは常に異なっています。私は現在、私は

属性値が

定数でなければなりません取得しています

@GET(Utils.APK_FILE_NAME) 

そして、私のUtilsクラスで

public static String APK_FILE_NAME = "" 

にいくつかのpublic static Stringを設定するにはどうすればよい ので

+1

の可能性のある重複した[レトロフィット2 - 動的URL](https://でのstackoverflow .com/questions/32559333/retrofit-2-dynamic-url) –

答えて

1

を使用して実行時にアクセスすることができ

public interface RetrofitInterface { 
    @Streaming 
    Call<ResponseBody> downloadFile(@Url String filename); 
} 

のようにパラメータとして渡す代わりに、注釈でそれを宣言することによって、それを動的にすることができます例えば:

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

文字列を渡す
+0

ありがとう、これは今動作しています –

1

あなたは今、あなたはあなたが@Pathアノテーションを使用することができます

Call<ResponseBody> request = retrofitInterface.downloadFile(Utils.APK_FILE_NAME); 
+0

例外が発生しました。致命的な例外:java.lang.IllegalArgumentException HTTPメソッド注釈が必要です(GET、POSTなど)。メソッドのためにRetrofitInterface.downloadFile –

関連する問題