Retrofit, Volley и HttpURLConnection - разные ответы

Делая простой запрос к серверу, я получаю разные данные ответа. 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>
}

Как отличается? Какой ожидаемый результат? Каков фактический результат? Может, вы хотели response?.body()?.string()?

Eugen Pechanec 10.08.2018 14:23

Допустим, у меня есть две конечные точки API api1 и api2 со строковым ответом Json json1 и json2 соответственно. Когда я использую дооснащение и делаю запрос api1, я получаю ответ json 2. Однако, когда я использую Volley или HttpURLConnection для запроса api1, я получаю json1, как и ожидалось. Обратите внимание, что ответ от модификации не из кеша. Сначала я подумал, что это может быть проблема с сервером, но когда я делаю запрос с помощью браузера, HttpURLConnection или даже залпом, я получаю json1 от api1, но после модернизации я получаю json2 от api1. Если бы я использовал VPN или мобильную сеть, она работала должным образом.

anup kunwar 11.08.2018 19:01

Обратите внимание, что хотя я напечатал тело ответа в коде, я отлаживаю строку ответа

anup kunwar 11.08.2018 19:02
0
3
55
0

Другие вопросы по теме