Как использовать выражение в onPostExecute kotlin - PullRequest
0 голосов
/ 30 марта 2019

Я новичок в kotlin, я хочу добавить диалоговое окно предупреждений на onPostExecute, используя выражение if для проверки имени класса handleJson, если не пусто, выполнить handleJson, если диалоговое окно пусто отображать оповещение "" Извините, у вас нет правильного подключения к Интернету "«

 inner class Arr : AsyncTask<String, String, String>() {

        val progressDialog = AlertDialog.Builder(this@MainActivity)
        val dialogView = layoutInflater.inflate(R.layout.progress_dialog, null)
        val message = dialogView.findViewById<TextView>(R.id.message_id)
        val dialog = progressDialog.create()

        override fun onPreExecute() {
            super.onPreExecute()

            dialog.setMessage("يرجى الانتظار")
            dialog.setCancelable(false)
            dialog.show()


        }

        //        for build connection
        override fun doInBackground(vararg url: String?): String {

            var text: String
            val connection = URL(url[0]).openConnection() as HttpURLConnection
            connection.connectTimeout = 300

            try {
                connection.connectTimeout = 5000 // We all timeout here
                connection.connect()
                text = connection.inputStream.use { it.reader().use{reader -> reader.readText()} }
            } finally{
                    connection.disconnect()

            }
            return text
        }

        override fun onPostExecute(result: String?) {

            handleJson(result)
            dialog.dismiss();

            if (handleJson(result)){

            }

        }

        override fun onProgressUpdate(vararg text: String?) {


        }

        @SuppressLint("WrongViewCast")

        private fun handleJson(jsonString: String?) {

            val jsonObj = JSONObject(jsonString)
            val result = jsonObj.getJSONObject("result")
            val response = result.getJSONObject("response")


//        val data = arrivals.getJSONObject("data")
            val jsonArray = JSONArray(arrivals.get("data").toString())

            val list = ArrayList<FlightShdu>()
            var x = 0
            while (x < jsonArray.length()) {

                val jsonObject = jsonArray.getJSONObject(x)



                list.add(
                    FlightShdu(
                        jsonObject.getJSONObject("flight").getJSONObject("identification").getJSONObject("number").getString(
                            "default"
                        ),
                        jsonObject.getJSONObject("flight").getJSONObject("airline").getString("short"),
                        jsonObject.getJSONObject("flight").getJSONObject("status").getJSONObject("generic").getJSONObject(
                            "status"
                        ).getString("text"),
                        jsonObject.getJSONObject("flight").getJSONObject("airline").getJSONObject("code").getString("icao"),
                        jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("scheduled").getString("arrival"),
                        jsonObject.getJSONObject("flight").getJSONObject("airport").getJSONObject("origin").getJSONObject("position").
                            getJSONObject("region").getString("city"),
                        jsonObject.getJSONObject("flight").getJSONObject("aircraft").getJSONObject("model").getString("code"),
//                    for more information
                        jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("real").getString("departure"),
                        jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("estimated").getString("arrival"),
//                    jsonObject.getJSONObject("flight").getJSONObject("time").getJSONObject("estimated").getString("arrival"),
                        jsonObject.getJSONObject("flight").getJSONObject("aircraft").getString("registration"),
                        jsonObject.getJSONObject("flight").getJSONObject("status").getJSONObject("generic").getJSONObject(
                            "status"
                        ).getString("diverted"),
                        arrivals.getString("timestamp"),
                        jsonObject.getJSONObject("flight").getJSONObject("status").getString("icon")


                    )
                )


                x++
            }
            list.forEach(::println)

            var adapter = ListAdapteArr(this@MainActivity, list)
            flight_arrivel_list.adapter = adapter



        }

    }

l ошибка

Type mismatch.
Required: Boolean Found: String?

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Кажется, что метод handleJson возвращает String, условие if должно вычислять логическое выражение, что-то равно чему-то другому, больше, чем и т. Д.

В Kotlin, как и в Java, в отличие от Java нет сокращенийJs.Поэтому, если результатом метода handleJson() является строка, не имеет значения, существует он или нет, он не будет оцениваться, это синтаксическая ошибка.

Попробуйте handleJson != null

0 голосов
/ 30 марта 2019

Я не вижу, где именно вы используете if, но, видя вашу ошибку Type mismatch, кажется, что вы пропускаете некоторую обнуляемую строку в if (condition?).

Убедитесь, что ваше условие проверки в *Заявление 1006 * является значением boolean, а не nullable String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...