Делая простой запрос к серверу, я получаю разные данные ответа. Volley
и HttpURLConnection
дают мне тот же ответ, которого я ожидал, однако, когда я запрашиваю использование модернизации, он дает мне совершенно разные данные.
Учтите, что это происходит только тогда, когда я использую наш ВАЙ-ФАЙ и только в Мобильном приложении. Когда я использую браузер и делаю такой же запрос, я получаю ожидаемые данные.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val alarmManger = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(this, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0)
alarmManger.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),
60 * 1000, pendingIntent)
Thread {
var conn = URL("$BASE_URL/home").openConnection() as HttpURLConnection
var inputStream = conn.inputStream
val br = BufferedReader(InputStreamReader(inputStream))
var sB = StringBuilder()
var line = br.readLine();
if (line != null) {
sB.append(line)
}
print(sB.toString())
}.start()
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.build()
val service = retrofit.create(GitHubService::class.java)
service.listRepos().enqueue(object : Callback<ResponseBody> {
override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) {
println(t)
}
override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
println(response?.body())
}
})
val queue = Volley.newRequestQueue(this)
val stringRequest = StringRequest(Request.Method.GET, BASE_URL + "/home",
com.android.volley.Response.Listener<String> { response ->
println(response)
},
com.android.volley.Response.ErrorListener { })
queue.add(stringRequest)
}
}
val BASE_URL = "myserviceurl";
interface GitHubService {
@GET("home")
fun listRepos(): Call<ResponseBody>
}
Допустим, у меня есть две конечные точки API api1 и api2 со строковым ответом Json json1 и json2 соответственно. Когда я использую дооснащение и делаю запрос api1, я получаю ответ json 2. Однако, когда я использую Volley или HttpURLConnection для запроса api1, я получаю json1, как и ожидалось. Обратите внимание, что ответ от модификации не из кеша. Сначала я подумал, что это может быть проблема с сервером, но когда я делаю запрос с помощью браузера, HttpURLConnection или даже залпом, я получаю json1 от api1, но после модернизации я получаю json2 от api1. Если бы я использовал VPN или мобильную сеть, она работала должным образом.
Обратите внимание, что хотя я напечатал тело ответа в коде, я отлаживаю строку ответа
Как отличается? Какой ожидаемый результат? Каков фактический результат? Может, вы хотели
response?.body()?.string()
?