Как получить доступ к значению, хранящемуся в переменной, которая находится в блоке в kotlin - PullRequest
1 голос
/ 20 марта 2019

У меня есть список, который я заполняю, используя цикл for. У меня есть этот код работает внутри метода, который имеет этот блок. Мне нужна помощь о том, как я могу вернуть myReportLocations и его значения

private fun getReportCoordinates(): ArrayList<HashMap<String, String>>{
        var reportLocations : ArrayList<HashMap<String, String>> = ArrayList()
        var myReportLocations : ArrayList<HashMap<String, String>> = ArrayList()

        Fuel.get("http://kite.pythonanywhere.com/api/v1/progress").header(Headers.COOKIE, cookie).responseJson { request: Request, response: Response, result: Result<FuelJson, FuelError> ->
            //incident_count = (count_occurrences('{', response.body().toString()) - 1).toString()
            for (i in 0..result.get().array().length() -1){
                //myReportLat = result.get().array().getJSONObject(i)["latitude"].toString()
                //myReportLong= result.get().array().getJSONObject(i)["longitude"].toString()
                var reportCoord: HashMap<String, String> = HashMap()

                //println("The coordinates are: " + myReportLat+ " : " + myReportLong)
                reportCoord.put("LocationID", i.toString())
                reportCoord.put("Latitude", result.get().array().getJSONObject(i)["latitude"].toString())
                reportCoord.put("Longitude", result.get().array().getJSONObject(i)["longitude"].toString())
                reportCoord.put("LocationName", "Progress Report")
                reportLocations.add(reportCoord)
            }

            /*for (x in 0..reportLocations.size -1){
                println("This is the " + x + "th coordinate " + reportLocations.get(x))
            }*/

            myReportLocations.addAll(reportLocations)//everything is stored here
        }
        myReportLocations//there nothing stored
        return myReportLocations
    }

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Вот решение для вашего случая:

private fun getReportCoordinates(result: (list:ArrayList<HashMap<String, String>> -> Unit) {
    var reportLocations : ArrayList<HashMap<String, String>> = ArrayList()
    var myReportLocations : ArrayList<HashMap<String, String>> = ArrayList()

    Fuel.get("http://kite.pythonanywhere.com/api/v1/progress").header(Headers.COOKIE, cookie).responseJson { request: Request, response: Response, result: Result<FuelJson, FuelError> ->
        //incident_count = (count_occurrences('{', response.body().toString()) - 1).toString()
        for (i in 0..result.get().array().length() -1){
            //myReportLat = result.get().array().getJSONObject(i)["latitude"].toString()
            //myReportLong= result.get().array().getJSONObject(i)["longitude"].toString()
            var reportCoord: HashMap<String, String> = HashMap()

            //println("The coordinates are: " + myReportLat+ " : " + myReportLong)
            reportCoord.put("LocationID", i.toString())
            reportCoord.put("Latitude", result.get().array().getJSONObject(i)["latitude"].toString())
            reportCoord.put("Longitude", result.get().array().getJSONObject(i)["longitude"].toString())
            reportCoord.put("LocationName", "Progress Report")
            reportLocations.add(reportCoord)
        }

        /*for (x in 0..reportLocations.size -1){
            println("This is the " + x + "th coordinate " + reportLocations.get(x))
        }*/

         result(myReportLocations)
    }
}
0 голосов
/ 20 марта 2019

Это асинхронный вызов.Таким образом, список будет обновляться ПОСЛЕ того, как он уже вернулся.То, что вы хотите сделать, это преобразовать это в блокирующий сетевой вызов.(Хотя я бы использовал другой поток, в противном случае ваше приложение зависнет, если оно выполнит это в основном потоке)

Попробуйте:

private fun getReportCoordinates(): ArrayList<HashMap<String, String>> {
var reportLocations: ArrayList<HashMap<String, String>> = ArrayList()
var myReportLocations: ArrayList<HashMap<String, String>> = ArrayList()

val result = Fuel.get("http://kite.pythonanywhere.com/api/v1/progress").header(Headers.COOKIE, cookie).responseJson()
//incident_count = (count_occurrences('{', response.body().toString()) - 1).toString()
for (i in 0..result.third.get().array().length() - 1) {
    //myReportLat = result.get().array().getJSONObject(i)["latitude"].toString()
    //myReportLong= result.get().array().getJSONObject(i)["longitude"].toString()
    var reportCoord: HashMap<String, String> = HashMap()

    //println("The coordinates are: " + myReportLat+ " : " + myReportLong)
    reportCoord.put("LocationID", i.toString())
    reportCoord.put("Latitude", result.get().array().getJSONObject(i)["latitude"].toString())
    reportCoord.put("Longitude", result.get().array().getJSONObject(i)["longitude"].toString())
    reportCoord.put("LocationName", "Progress Report")
    reportLocations.add(reportCoord)
}

myReportLocations.addAll(reportLocations)
return myReportLocations

}

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