我正在製作一個基本的移動應用程序來與nosql數據庫進行交互。到目前爲止,我沒有使用過Volley的問題。我的數據庫中有兩個主要實體,都將它們的所有屬性存儲爲字符串。對於一個實體,Volley的GET和POST可以正常工作,但對於另一個實體,GET請求可以工作,但不是POST請求(某些參數爲空)。Volley POST請求
我遇到麻煩的網頁是爲了讓用戶編輯他/她已經放入的數據。我首先使用Volley GET請求填充它。這工作正常,所有參數正確顯示。然後,如果用戶更改數據並提交數據,則會提交一個POST請求,該請求由於某些參數爲空而失敗。
我已經縮小了錯誤(我認爲)到getParams()函數。將軍和勝利者變量是填充的,但所有其他變量都返回爲空。再一次,我所有的變量都是字符串,所以它看起來不像一個不兼容的數據類型。
這裏是我的代碼:
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response != null) {
try {
Toast.makeText(EditDeleteDetail.this, "Detail Updated", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
}
Log.e(TAG, response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}
) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("generals", generals);
Log.d("Params generals", generals);
params.put("victor", victor);
Log.d("Params victor", victor);
params.put("ramifications", ramifications);
Log.d("Params ramifications", ramifications);
params.put("casualties", casualties);
Log.d("Params casualties", casualties);
params.put("startdate", startdate);
Log.d("Params startdate", startdate);
params.put("enddate", enddate);
return params;
}
};
queue.add(postRequest);
return true;
}
這裏的API,這是我在Python做的代碼。我可以手動POST使用curl測試或郵遞員的應用程序,所有的數據都是正確填充並保存在數據庫中:
import webapp2
from google.appengine.ext import ndb
import db_models
import json
class Detail(webapp2.RequestHandler):
def post(self, **kwargs):
"""Creates a Detail entity
POST Body Variables:
generals- String. List of commanding generals
victor - String. Winner (if any) of battle
ramifications - String. Results and implications of the battle
casualties - Stored as string, but also includes integers. Participating armies' casualties
startdate - Date property
enddate - Date property
"""
if 'application/json' not in self.request.accept:
self.response.status = 406
self.response.status_message = "Not Acceptable, API only supports application/json MIME type"
return
if 'did' in kwargs:
curr_det = ndb.Key(db_models.Details, int(kwargs['did'])).get()
generals = self.request.get('generals', default_value=None)
victor = self.request.get('victor', default_value=None)
ramifications = self.request.get('ramifications', default_value=None)
casualties = self.request.get('casualties', default_value=None)
startdate = self.request.get('startdate', default_value=None)
enddate = self.request.get('enddate', default_value=None)
if generals:
curr_det.generals = generals
if victor:
curr_det.victor = victor
if ramifications:
curr_det.ramifications = ramifications
if casualties:
curr_det.casualties = casualties
if startdate:
curr_det.startdate = startdate
if enddate:
curr_det.enddate = enddate
curr_det.put()
out = curr_det.to_dict()
self.response.write(json.dumps(out))
else:
new_detail = db_models.Details() #making a new Detail
generals = self.request.get('generals', default_value=None)
victor = self.request.get('victor', default_value=None)
ramifications = self.request.get('ramifications', default_value=None)
casualties = self.request.get('casualties', default_value=None)
startdate = self.request.get('startdate', default_value=None)
enddate = self.request.get('enddate', default_value=None)
if generals:
new_detail.generals = generals
else:
self.response.status = 400
self.response.status_message = "Invalid request, Commanding generals are Required"
return
if victor:
new_detail.victor = victor
if ramifications:
new_detail.ramifications = ramifications
if casualties:
new_detail.casualties = casualties
if startdate:
new_detail.startdate = startdate
if enddate:
new_detail.enddate = enddate
key = new_detail.put() #this saves the new Detail in the database
out = new_detail.to_dict() #then we return the thing we just made
self.response.write(json.dumps(out))
return
',但所有其他的回來爲null'。從哪兒來了?而且,你在哪裏看到他們空? – greenapps
那些人在那裏PARAMS分配? – djodjo
'Volley的GET和POST工作正常'。好吧。它們工作正常。',但是對於另一個實體,GET請求可以工作,但不是POST請求(某些參數爲空).'。Suddendy它們不能正常工作?哪個其他實體? – greenapps