Java 改装2:@Query";编码=假";don';行不通
0)我正在使用改装2进行工作。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?我读了其他问题,但没有解决我的问题。谢谢
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)字符串您的参数);
就这样!所有这些对我来说都很有效。如果您有一些意见或问题,我会回答。这到底是什么问题?为什么你有一个没有值的paramjson
呢?@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);