Java 改装2:@Query";编码=假";don';行不通

Java 改装2:@Query";编码=假";don';行不通,java,android,json,retrofit2,Java,Android,Json,Retrofit2,0)我正在使用改装2进行工作。 1) 我有一些界面: public interface ApiService { @GET("statdirectory/exchange") Call<List<MyModel>> getСurrency(@Query("date") String inputDate); } 但我的结果与步骤3中的结果相同 5) 如何检查这个问题?如何在我的字符串上没有%26的情况下获取URL?我读了其他问题,但没有解决我的问题。谢谢

0)我正在使用改装2进行工作。
1) 我有一些界面:

public interface ApiService {
    @GET("statdirectory/exchange")
    Call<List<MyModel>>  getСurrency(@Query("date") String inputDate);
}
但我的结果与步骤3中的结果相同


5) 如何检查这个问题?如何在我的字符串上没有%26的情况下获取URL?我读了其他问题,但没有解决我的问题。谢谢

您的Json将包含键值数据。尝试以下面的格式传递。 它将自动在Json键之前添加
&

getСurrency(@Query("date") String inputDate, @Query("key1") String value1, @Query("key2") String value2);
正如swankjesse在这里指出的

用于生成url

HttpUrl url = HttpUrl.parse("https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?date=20170916&json");
然后将方法调用更改为

@GET
Call<List<MyModel>>  getСurrency(@Url String ur);
然后


我只是想澄清,最初的问题是编码参数必须为true:
encoded=
true。这表明提供的值已经编码,因此不需要通过改装重新编码。如改装文档中所述,
encoded
的默认值为false。即:

getСurrency(@Query(value="date", encoded=true) String inputDate);
将生成正确的url

文档说明了有关
编码的
参数的以下内容:

指定参数名称和值是否已为URL 编码的


来源:

如果你仍然有这个问题,我有两个解决方案

第一个解决方案:

// Create a URL object and pass to constructor your url
URL urlObject = new URL(url);
// Create connection
HttpURLConnection connection = (HttpURLConnection) urlObject.openConnection();
// SET 'GET' request
connection.setRequestMethod("GET");
connection.connect();
// Create stream to read output
InputStream inputStream = connection.getInputStream();

// Craete buffer to gain all output
StringBuffer stringBuffer = new StringBuffer();
AND HERE IS THE KEY
YOU CREATE A BUFFERREADER AND SET CP1251 SO URL`S GONNA BE ENCODED
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "cp1251"));
// Read untill end
String line;
while ((line = bufferedReader.readLine()) != null) {
    stringBuffer.append(line);
}
// HERE IS YOUR JSON RESULT
resultJson = stringBuffer.toString();
第二种解决方案:

// Create a URL object and pass to constructor your url
URL urlObject = new URL(url);
// Create connection
HttpURLConnection connection = (HttpURLConnection) urlObject.openConnection();
// SET 'GET' request
connection.setRequestMethod("GET");
connection.connect();
// Create stream to read output
InputStream inputStream = connection.getInputStream();

// Craete buffer to gain all output
StringBuffer stringBuffer = new StringBuffer();
AND HERE IS THE KEY
YOU CREATE A BUFFERREADER AND SET CP1251 SO URL`S GONNA BE ENCODED
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "cp1251"));
// Read untill end
String line;
while ((line = bufferedReader.readLine()) != null) {
    stringBuffer.append(line);
}
// HERE IS YOUR JSON RESULT
resultJson = stringBuffer.toString();
只需将
encoded=true
添加到
@Query
注释中即可

@GET("some_path")
    Call<RequestBody> function(@Query(value = "param", encoded = true) String your_param);
@GET(“某些路径”)
调用函数(@Query(value=“param”,encoded=true)字符串您的参数);

就这样!所有这些对我来说都很有效。如果您有一些意见或问题,我会回答。

这到底是什么问题?为什么你有一个没有值的param
json
呢?@TimCastelijns,我的完整代码是有效的,但我不知道为什么我的URL 20170917&json编码为20170917%26json,以及如何修复它。你想修复什么?你知道url编码是什么吗?@TimCastelijns,对url编码有点熟悉。我该怎么办?@Tomas您需要手动构建url查询将无法像我的帖子中指出的github问题那样工作谢谢您的回答!!!这对我有用!)但我有一个问题。。。如何使用“Okhttp的拦截器”的第二种方式?我在哪里有覆盖
截取
方法?
 OkHttpClient client = new OkHttpClient.Builder();
 client.addInterceptor(new MyInterceptor());
getСurrency(@Query(value="date", encoded=true) String inputDate);
// Create a URL object and pass to constructor your url
URL urlObject = new URL(url);
// Create connection
HttpURLConnection connection = (HttpURLConnection) urlObject.openConnection();
// SET 'GET' request
connection.setRequestMethod("GET");
connection.connect();
// Create stream to read output
InputStream inputStream = connection.getInputStream();

// Craete buffer to gain all output
StringBuffer stringBuffer = new StringBuffer();
AND HERE IS THE KEY
YOU CREATE A BUFFERREADER AND SET CP1251 SO URL`S GONNA BE ENCODED
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "cp1251"));
// Read untill end
String line;
while ((line = bufferedReader.readLine()) != null) {
    stringBuffer.append(line);
}
// HERE IS YOUR JSON RESULT
resultJson = stringBuffer.toString();
@GET("some_path")
    Call<RequestBody> function(@Query(value = "param", encoded = true) String your_param);