如何从字符串请求生成序列?

时间:2018-08-19 04:02:30

标签: java android

我尝试使用Google地图和JSON构建应用,但是我需要从Stringrequest生成一个序列。

我打算采用以下方式,但结果为空

StringRequest strReq = new StringRequest(Request.Method.POST, urltime, new Response.Listener<String>() {

    @Override
    public void onResponse(String response) {
        Log.e("Response: ", response);

        try {
            JSONObject jObj = new JSONObject(response);
            String getObject = jObj.getString("saagPos");
            JSONArray jsonArray = new JSONArray(getObject);

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                coorWay = coorWay + "|" + jsonObject.getString(LAT2) + "," + jsonObject.getString(LNG2);

                if (bangaloreRoute == null) {
                    bangaloreRoute = new ArrayList<>();
                } else {
                    bangaloreRoute.clear();
                }

                bangaloreRoute.add(new LatLng(Double.parseDouble(jsonObject.getString(LAT2)), Double.parseDouble(jsonObject.getString(LNG2))));

                // Menambah data marker untuk di tampilkan ke google map

            }
        } catch (JSONException e) {…
    }
}

我需要获得以下序列,对每个结果重复bangaloreRoute.add(new LatLng(...,例如:

bangaloreRoute.add(new LatLng(12.922294704121231, 77.61939525604248));
bangaloreRoute.add(new LatLng(12.924637088068884, 77.6180648803711));
bangaloreRoute.add(new LatLng(12.925557304321782, 77.6200819015503));
bangaloreRoute.add(new LatLng(12.927104933097784, 77.62081146240234));
bangaloreRoute.add(new LatLng(12.928234277770715, 77.62111186981201));
bangaloreRoute.add(new LatLng(12.92990737159723, 77.6218843460083));
bangaloreRoute.add(new LatLng(12.9337554448302, 77.62342929840088));

该序列如何生成,以从我的StringRequest构建路由?

谢谢。

2 个答案:

答案 0 :(得分:0)

您没有显示bangaloreRoute的初始定义位置,但看起来您的代码中存在错误:

            if (bangaloreRoute == null) {
                bangaloreRoute = new ArrayList<>();
            } else {
                bangaloreRoute.clear();
            }

以上是您的主循环的一部分。这实际上是在说:“第一次,如果bangaloreRoute为空,则创建一个新的ArrayList”就可以了。但是之后else总是 清除bangaloreRoute ArrayList,无论它们中已有什么。

因此,每次循环遍历此代码时,都会清除上一个循环迭代中添加的内容。最后,您将最终得到一个LatLng元素,只是最后添加的一个元素。

答案 1 :(得分:0)

可能是在for循环的每个循环中清除arraylist并插入新数据。因此, bangaloreroute 阵列列表中没有数据。

尝试以下修改并将其替换为:

    StringRequest strReq = new StringRequest(Request.Method.POST, urltime, new Response.Listener<String>() {

        if(bangaloreRoute ==null)
             bangaloreRoute =new ArrayList<>();

        @Override
        public void onResponse(String response) {
            Log.e("Response: ", response);

            try {
                JSONObject jObj = new JSONObject(response);
                String getObject = jObj.getString("saagPos");
                JSONArray jsonArray = new JSONArray(getObject);

                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    coorWay = coorWay + "|" + jsonObject.getString(LAT2) + "," + jsonObject.getString(LNG2);

                    bangaloreRoute.add(new LatLng(Double.parseDouble(jsonObject.getString(LAT2)), Double.parseDouble(jsonObject.getString(LNG2))));

                    // Menambah data marker untuk di tampilkan ke google map

                }
            } catch (JSONException e) {
        }
    }

希望这可以解决您的问题。