2017-01-27 3 views
-2

formatieren Ich schwöre, ich habe meine Suche auf diese erschöpft und seit 2 Tagen gearbeitet. Ich versuche eine Volley-Put-Anfrage zu verwenden, die ein JSON-Objekt und ein eingebettetes Array enthält.Wie JSON für Volley Put-Anfrage für Mapbox API

Ich bin aus dem Beispiel aus dem MapBox API arbeiten: https://www.mapbox.com/api-documentation/#insert-or-update-a-feature

Was ich senden müssen:

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" 
 
    } 
 
}

Der Code habe ich bisher arbeite in der Lage, einen neuen schreiben Dataset auf den Server, aber meine Absicht ist es, ein neues Punkt-Feature auf der Karte zu platzieren. Hier ist meine Kreation ...

// Dies erzeugt einen neuen Datensatz auf dem Server public void postMethod (Ansicht Ansicht) {

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); 


} 

Erste das JSON korrekt formatiert und Einstellung der richtige Stecke wäre so hilfreich. Ich habe mein Gehirn wirklich ausprobiert. Vielen Dank.

+0

Offensichtlich sollten Sie stattdessen jsonrequest verwenden StringRequest – Selvin

Antwort

0

Wir unterstützen GeoJSON-Objekte in der Bibliothek Mapbox Android Services. Mit ihm können Sie programmatisch ein Feature Objekt erstellen (zB Feature.fromGeometry(Geometry geometry)) oder aus einem rohen geojson Zeichenfolge (um die Server-Antwort parsen):

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

Leider noch wir nicht die Datensätze API unterstützen, aber Wir verfolgen seine Implementierung auf https://github.com/mapbox/mapbox-java/issues/101.

+0

Vielen Dank für Ihre Kommentare. Ich habe das Lernprogramm abgeschlossen, habe eine Karte in meiner App, kann ein neues Dataset hochladen und alle Features auf einer Karte in ein Textfenster abrufen, aber das Ziel meines Projekts ist das Hinzufügen eines Features zu einem Dataset in der Mapbox Server. Ist das derzeit mit der von Ihnen genannten Methode möglich? –

Verwandte Themen