【问题标题】:Volley StringRequest handled by RequestQueue crashes without errorRequestQueue 处理的 Volley StringRequest 崩溃且没有错误
【发布时间】:2018-07-24 20:12:48
【问题描述】:

这是崩溃的代码:

val url = "https://chotawhatsapp.firebaseio.com/users.json"
val res = object : Response.Listener<String> {         
    //Toast.makeText(this@Main2Activity,"show",Toast.LENGTH_LONG).show()
    @Override
    override fun onResponse(s: String) {          
        Toast.makeText(this@Main2Activity,"show",Toast.LENGTH_LONG).show()
        doOnSuccess(s)
        //the function OnResponse is shown never used in the program while toast is properly executable
    }
}

val eros = object :Response.ErrorListener {
@Override
override fun onErrorResponse(volleyError: VolleyError) {
        Toast.makeText(this@Main2Activity,"volley error - $volleyError",Toast.LENGTH_LONG).show()
    }
}

//  request = StringRequest(Request.Method.GET,url,)
val request = StringRequest(Request.Method.GET, url, res,eros)

val rQueue = Volley.newRequestQueue(this@Main2Activity)
rQueue.add(request)

logcat 中没有任何关于崩溃的内容。

代码中的 toast 消息不显示。

【问题讨论】:

  • 你好普吉。我将您的代码添加到一个新的 Kotlin 项目中。它工作得很好,只有很小的变化。我已包含有关我的设置的其他信息。如果您仍然遇到问题,请告诉我,我可以帮助您进行调查。但请让我知道在它崩溃之前你可以打破的最后一行。也尝试让 logcat 工作 1. 确保在左上角选择了正确的设备 2. 按绿色重新启动小部件 3. 重新启动 Android Studio。还要确保详细信息已打开,并且 logcat 搜索小部件中没有任何内容。干杯!

标签: android kotlin android-volley


【解决方案1】:

这段代码对我来说很好用。只有细微的差别:

fun f() {
    val url = "https://www.google.co.uk/"
    val res = object :Response.Listener<String>{
        override fun onResponse(response: String?) {
            Toast.makeText(this@MainActivity,"no err: $response", Toast.LENGTH_LONG).show()
        }
    }

    val eros = object :Response.ErrorListener {
        @Override
        override fun onErrorResponse(volleyError: VolleyError){
            Toast.makeText(this@MainActivity,"volley error - $volleyError", Toast.LENGTH_LONG).show()
        }
    }

    //  request = StringRequest(Request.Method.GET,url,)
    val request = StringRequest(Request.Method.GET, url, res,eros)

    val rQueue = Volley.newRequestQueue(this@MainActivity)
    rQueue.add(request)
}

分级:

 implementation 'com.android.volley:volley:1.1.1'

清单:

 <uses-permission android:name="android.permission.INTERNET" />

项目创建过程:

 File -> New Project -> [Tick box: Include Kotlin Support]

之所以提到这个过程,是因为在将现有 Java 应用程序转换为 Kotlin 时,我常常不太幸运。

我不记得 Volley 是将其结果发布回主线程还是工作线程。但是 onResponse 和 onErrorResponse 都是在主线程上调用的,所以 Toast.makeText 是安全的。

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 2017-09-12
    • 2016-06-22
    相关资源
    最近更新 更多