2016-04-29 8 views
0

Seite Server:

import flask 

    import flask.ext.sqlalchemy 

    import flask.ext.restless 

    app = flask.Flask(__name__) 

    app.config['DEBUG'] = True 

    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 

    SQLALCHEMY_TRACK_MODIFICATIONS=True 
    db = flask.ext.sqlalchemy.SQLAlchemy(app) 

    class Person(db.Model): 

     id = db.Column(db.Integer, primary_key=True) 
     name = db.Column(db.Unicode, unique=True) 
     birth_date = db.Column(db.Date) 
    class Computer(db.Model): 

     id = db.Column(db.Integer, primary_key=True) 
     name = db.Column(db.Unicode, unique=True) 
     vendor = db.Column(db.Unicode) 
     purchase_time = db.Column(db.DateTime) 
     owner_id = db.Column(db.Integer, db.ForeignKey('person.id')) 
     owner = db.relationship('Person', backref=db.backref('computers', 
                  lazy='dynamic')) 

    db.create_all() 

    manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db=db) 

    manager.create_api(Person, methods=['GET', 'POST', 'DELETE']) 

    manager.create_api(Computer, methods=['GET']) 

    app.run(host='0.0.0.0', port=5000, debug=True) 

Client Side:

Volley Pfosten MitAndroid Volley Fehleranforderungscode 415 mit Rest API?

RequestQueue queue = Volley.newRequestQueue(this); 

     StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) { 
         // response 
         Log.d("Response", response); 
        } 
       }, 
       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         // error 

         Log.d("Error.Response", String.valueOf(error)); 
        } 
       } 
     ) { 
      @Override 
      protected Map<String, String> getParams() 
      { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("name", "Anything"); 

       return params; 
      } 
     }; 
     queue.add(postRequest); 

    } 

Ausgabe von log:

04-29 11: 42: 24,556 1890 -1946 /? I/Vereisung: Indizierung durchgeführt F3642025687382E430F3465743F12480D56AAC66 04-29 11: 43: 32.123 3147-3196 /? E/Volley: [157] BasicNetwork. performRequest: Unerwarteter Antwortcode 415 für http://IP:5000/api/person 04-29 11: 43: 32.132 3147-3147 /? D/Error.Response: com.android.volley.ServerError 04-29 11: 45: 19.365 1298-1311 /? I/UsageStatsService: Benutzer [0] Verbrauchsstatistiken auf Datenträger leeren

+0

folgt Haben Sie den Inhaltstyp im Kopf gesetzt? –

Antwort

1

sorgen für den richtigen Inhaltstyp als

// Optional Parameters to pass as POST request 
    JSONObject js = new JSONObject(); 
    try { 
     js.put("name","anything"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    // Make request for JSONObject 
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(
      Request.Method.POST, url, js, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.d(TAG, response.toString() + " i am queen"); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       } 
     }) { 

     /** 
     * Passing some request headers 
     */ 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/json; charset=utf-8"); 
      return headers; 
     } 

    }; 

    // Adding request to request queue 
    Volley.newRequestQueue(this).add(jsonObjReq); 

} 
1

415 ist der Fehlercode für den falschen Medientyp. Sie senden den Nachrichtentext oder Ihre Postanforderung im Nur-Text-Format, wenn der Server json erwartet. Finden Sie heraus, welche Art von Inhalt Sie senden sollten, und stellen Sie den Post-Body auf diesen Typ ein.

@Override 
public byte[] getBody() { 
    return 'your json string'.getBytes(); 
} 

@Override 
public String getBodyContentType() { 
    return "application/json; charset=utf-8"; 
} 
+0

Ich hatte das auch benutzt, aber es hat nicht funktioniert Ich brauche einen Code, wenn Sie liefern können. – winne

+0

funktioniert nicht der gleiche Fehler. – winne