2010-09-28 18 views
11

मैं अपने पहले एंड्रॉइड एप्लिकेशन पर काम कर रहा हूं। अब मैं चाहता हूं कि सर्वर पर चल रही एक सुस्त सेवा के लिए POST अनुरोध करना है और मैं चाहता हूं कि इस अनुरोध की बॉडी जेएसओएन स्ट्रिंग हो।मैं एंड्रॉइड एप्लिकेशन से सर्वर पर POST अनुरोध में JSON के रूप में JSON कैसे भेजूं?

मैं सर्वर पर भेजने के लिए जेएसओएन उत्पन्न करने के लिए जीएसओएन का उपयोग कर रहा हूं। कोड मैं पोस्ट अनुरोध बनाने के लिए उपयोग कर रहा हूँ इस प्रकार है:

HttpPost requisicao = new HttpPost(); 
requisicao.setURI(new URI(uri)); 
requisicao.setHeader("User-Agent", sUserAgent); 
requisicao.setHeader("Content-type", "application/json"); 
HttpResponse resposta = null; 
//I can see the json correctly print on log with the following entry. 
Log.d(TAG, "JSon String to send as body in this request ==>> " + jsonString); 
//than I try to send JSon using setEntityMethod 
StringEntity sEntity = new StringEntity(jsonString, "UTF-8"); 
requisicao.setEntity(sEntity); 

resposta = httpClient.execute(requisicao); 
resultado = HttpProxy.leRespostaServidor(resposta); 

प्रतिक्रिया कोड 400 गलत अनुरोध है और सर्वर लॉग से मैं जानकारी पढ़ सकते हैं। जहां यह शरीर को सही ढंग से नहीं भेजा गया था कहते हैं:

13:48:22,524 ERROR [SynchronousDispatcher] Failed executing POST /peso/cadastrar/[email protected] 
org.jboss.resteasy.spi.BadRequestException: Could not find message body reader for type: class java.io.Reader of content type: application/json 

सर्वर साइड के लिए कोड एक सरल सीवन रेस्ट सेवा है:

@POST 
@Path("/cadastrar/{userEmail}") 
@Consumes(MediaType.APPLICATION_JSON) 
public String cadastraPeso(@PathParam("userEmail") String email, Reader jsonString) 
{ 
    LineNumberReader lnr = new LineNumberReader(jsonString); 
    try { 
    String json = lnr.readLine(); 
    if(json != null) 
    { 
    log.debug("String json recebida do device ==>> " + json); 
    } 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return "OK - o e-mail processado foi ==>> " + email; 
} 

क्या एंड्रॉयड ग्राहक कोड के साथ गलत हो सकता है? मैंने वेब पर शोध किया है और इस विषय पर कोई वास्तव में उपयोगी जानकारी नहीं मिली है।

[] रों

उत्तर

10

क्षमा लोगों, बस पता चला कि त्रुटि रेस्ट सेवा पर था। मैं इसे बदल एक स्ट्रिंग के बजाय रीडर वस्तु प्राप्त करने के लिए और अब यह काम करता है के रूप में उम्मीद, सर्वर साइड पर बाकी कोड है:

@POST 
@Path("/cadastrar/{userEmail}") 
@Consumes(MediaType.APPLICATION_JSON) 
public String cadastraPeso(@PathParam("userEmail") String email, String jsonString) 
{ 
     String json = jsonString; 
     if(json != null) 
     { 
      log.debug("String json recebida do device ==>> " + json); 
     } 
     return "OK - o e-mail processado foi ==>> " + email; 
} 

और JSON स्ट्रिंग सही ढंग से सर्वर साइड में प्राप्त किया गया है।

तो उपरोक्त एंड्रॉइड कोड इसके अनुसार काम कर रहा है।

संबंध है।

+3

अच्छा मार्कोस। अब से दो दिन, स्वीकृत –

+0

हाय आर्थर के रूप में अपना उत्तर चिह्नित करें, मुझे आपको बताना है कि मैं अभी भी स्टैक ओवरफ़्लो का उपयोग करके थोड़ा खो गया हूं। एक स्टार्टर के रूप में यह मेरे लिए बहुत अधिक जानकारी देखता है, मेरा मतलब है, इस बिंदु पर सभी मैकेनिक्स, टिप्पणियां, पोस्ट, पहली छाप के रूप में इन फ़ोरम को थोड़ा उलझन में दिखती हैं, लेकिन मुझे इसका उपयोग करके बहुत अच्छी जानकारी मिली है इसलिए मुझे उपयोग करने की उम्मीद है शीघ्र। –

+0

मुझे खुशी है कि आप इस साइट को उपयोगी पाते हैं, लेकिन नीचे तीर के नीचे दिए गए आइकन पर क्लिक करके अपने उत्तर को एक स्वीकृत उत्तर के रूप में स्वीकार करें। जब आपका माउस खत्म हो जाए तो इसे हरे रंग के रूप में हाइलाइट किया जाएगा। –

संबंधित मुद्दे