2017-01-27 13 views
-2

Клянусь, я исчерпал свой поиск по этому вопросу и работал в течение 2 дней. Я пытаюсь использовать запрос Volley Put, который содержит объект JSON и встроенный массив.Как форматировать JSON для Volley Положить запрос на Mapbox API

Я работаю на примере из MapBox API: https://www.mapbox.com/api-documentation/#insert-or-update-a-feature

Что мне нужно отправить:

curl "https://api.mapbox.com/datasets/v1/therefore/lkjashdglkhasdkljsa/features/test123456?dfalkjhsfdlkjhdfs" \ 
 
    -X PUT \ 
 
    -H "Content-Type: application/json" \ 
 
    -d @file.geojson 
 

 
{ 
 
    "id": "test123456", 
 
    "type": "Feature", 
 
    "geometry": { 
 
    "type": "Polygon", 
 
    "coordinates": [ 
 
     [ 
 
     [ 100, 0 ], 
 
     [ 101, 0 ], 
 
     [ 101, 1 ], 
 
     [ 100, 1 ], 
 
     [ 100, 0 ] 
 
     ] 
 
    ] 
 
    }, 
 
    "properties": { 
 
    "prop0": "value0" 
 
    } 
 
}

Код, я работаю до сих пор может разместить новый dataset на сервер, но мои намерения - добавить новую точку на карте. Вот мое творение ...

// Это создает новый набор данных на общественном ничтожной postMethod (View зрения) сервер {

final RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); 

    StringRequest stringRequest = new StringRequest(Request.Method.PUT, postdatapointurl, 
      new com.android.volley.Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        try { 
         JSONObject jsonResponse = new JSONObject(response).getJSONObject("form"); 
         String site = jsonResponse.getString("site"), 
           network = jsonResponse.getString("network"); 
         System.out.println("Site: "+site+"\nNetwork: "+network); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

        textview.setText(response); 
        requestQueue.stop(); 
       } 
      }, new com.android.volley.Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

      textview.setText("something went wrong"); 
      error.printStackTrace(); 
      requestQueue.stop(); 
     } 
    }) 

    { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("id","nate123456789"); 
      params.put("geometry",{"type","Polygon") // <-- obviously wrong. This is where the problem is. 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/application.json"); 
      //headers.put("", "value"); 
      return headers; 
     } 
    }; 
    Volley.newRequestQueue(this).add(stringRequest); 


} 

Получение JSON в правильном формате и настройка расфасованные право было бы так полезно. Я действительно пробовал свой мозг. Благодарю.

+0

Очевидно, вы должны использовать jsonrequest вместо StringRequest – Selvin

ответ

0

У нас есть поддержка объектов GeoJSON в библиотеке Mapbox Android Services. С его помощью вы можете создать Feature объект программно (например, Feature.fromGeometry(Geometry geometry)), или из сырой geojson строки (для разбора ответа сервера):

Feature geo = Feature.fromJson(geojson); assertEquals(geo.getType(), "Feature"); assertEquals(geo.getGeometry().getType(), "Point");

К сожалению, мы до сих пор не поддерживают API наборов данных, но мы отслеживаем его реализацию на https://github.com/mapbox/mapbox-java/issues/101.

+0

Большое вам спасибо за комментирование. Я закончил учебник, имею карту в своем приложении, могу POST создать новый набор данных и ПОЛУЧИТЬ все мои функции на карте в текстовое окно, но цель моего проекта - добавить функцию к набору данных на карте сервера. Возможно ли это с помощью метода, который вы упоминаете? –