2011-02-11 7 views
17

मेरे पास यह JSON स्ट्रिंग है। मैं इसे सर्वर पर पोस्ट करना चाहता हूं (यानी POST विधि का उपयोग कर)। एंड्रॉइड में यह कैसे किया जा सकता है?JSON प्रारूप में सर्वर पर एंड्रॉइड में डेटा कैसे पोस्ट करें?

JSON स्ट्रिंग:

{ 
    "clientId": "ID:1234-1234", 
    "device": { 
     "userAgent": "myUA", 
     "capabilities": { 
      "sms": true, 
      "data": true, 
      "gps": true, 
      "keyValue": { 
       "Key2": "MyValue2", 
       "Key1": "myvalue1" 
      } 
     }, 
     "screen": { 
      "width": 45, 
      "height": 32 
     }, 
     "keyValue": { 
      "DevcKey2": "myValue2", 
      "DevcKey1": "myValue1" 
     } 
    }, 
    "time": 1294617435368 
} 

मैं इस JSON सारणी कैसे फार्म और सर्वर पर पोस्ट कर सकते हैं?

+0

संभावित डुप्लिकेट [मैं एंड्रॉइड एप्लिकेशन से सर्वर के लिए POST अनुरोध में JSON कैसे भेजूं?] (http://stackoverflow.com/questions/3815522/how-do-i-send-json -ए-बॉडी-इन-ए-पोस्ट-अनुरोध-टू-सर्वर-से-एंड्रॉइड-आवेदकियो) – Thilo

+1

org.json पैकेज में (http://developer.android.com/reference/org/json/package- summary.html) इसमें JSON स्ट्रिंग बनाने के लिए आवश्यक सब कुछ होना चाहिए। – xandy

+0

@ थिलो एनओपी जिसमें 2 फॉर्म जेसन स्ट्रिंग के बारे में सामान नहीं है .... –

उत्तर

17

मैंने इसे स्वयं किया।

JSONObject returnedJObject= new JSONObject(); 
JSONObject KeyvalspairJObject=new JSONObject(); 
JSONObject devcKeyvalspairJObject=new JSONObject(); 
JSONObject capabilityJObject=new JSONObject(); 
JSONObject ScreenDimensionsJObject =new JSONObject(); 
JSONObject deviceJObject= new JSONObject(); 
try{ 
    KeyvalspairJObject.put("key1","val1"); 
    KeyvalspairJObject.put("key2","val2"); 
    capabilityJObject.put("sms", false); 
    capabilityJObject.put("data", true); 
    capabilityJObject.put("gps", true); 
    capabilityJObject.put("wifi", true); 
    capabilityJObject.put("keyValue", KeyvalspairJObject); 
    ScreenDimensionsJObject.put("width", 45); 
    ScreenDimensionsJObject.put("height", 45); 
    devcKeyvalspairJObject.put("Devckey1","val1"); 
    devcKeyvalspairJObject.put("DEVCkey2","val2"); 
    deviceJObject.put("userAgent", "MYUserAgent"); 
    deviceJObject.put("capabilities", capabilityJObject); 
    deviceJObject.put("screen", ScreenDimensionsJObject); 
    deviceJObject.put("keyValue", devcKeyvalspairJObject); 

    returnedJObject.put("clientId", "ID:1234-1234"); 
    returnedJObject.put("carrier","TMobile"); 
    returnedJObject.put("device",deviceJObject); 
    returnedJObject.put("time",1294617435); 
    returnedJObject.put("msisdn","1234567890"); 
    returnedJObject.put("timezone","GMT"); 
} 
catch(JSONException e) 
{ 
} 

और इस प्रकार हम सर्वर पर JSON डेटा भेज सकते हैं।

public String putDataToServer(String url,JSONObject returnedJObject) throws Throwable 
{ 
    HttpPost request = new HttpPost(url); 
    JSONStringer json = new JSONStringer(); 
    StringBuilder sb=new StringBuilder(); 


    if (returnedJObject!=null) 
    { 
     Iterator<String> itKeys = returnedJObject.keys(); 
     if(itKeys.hasNext()) 
      json.object(); 
     while (itKeys.hasNext()) 
     { 
      String k=itKeys.next(); 
      json.key(k).value(returnedJObject.get(k)); 
      Log.e("keys "+k,"value "+returnedJObject.get(k).toString()); 
     }    
    } 
    json.endObject(); 


    StringEntity entity = new StringEntity(json.toString()); 
         entity.setContentType("application/json;charset=UTF-8"); 
    entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8")); 
    request.setHeader("Accept", "application/json"); 
    request.setEntity(entity); 

    HttpResponse response =null; 
    DefaultHttpClient httpClient = new DefaultHttpClient(); 

    HttpConnectionParams.setSoTimeout(httpClient.getParams(), Constants.ANDROID_CONNECTION_TIMEOUT*1000); 
    HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),Constants.ANDROID_CONNECTION_TIMEOUT*1000); 
    try{ 
     response = httpClient.execute(request); 
    } 
    catch(SocketException se) 
    { 
     Log.e("SocketException", se+""); 
     throw se; 
    } 
    InputStream in = response.getEntity().getContent(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
    String line = null; 
    while((line = reader.readLine()) != null){ 
     sb.append(line); 
    } 
    return sb.toString(); 
} 
+0

putData में jsonObj पैरामीटर क्यों लौटाया जाता है JObject? क्या यह उस ऑब्जेक्ट का प्रतिनिधित्व नहीं करता जिसे भेजने की आवश्यकता है? मेरे लिए यह काम नहीं कर रहा है मुझे कोड 200 –

+0

के साथ सर्वर से "कोई इनपुट डेटा" नहीं मिलता है, बस उपरोक्त कोड के साथ सिंक में कोड नीचे करने के लिए मैंने वापस लौटाया है। अन्य नाम का उपयोग कोड को तोड़ नहीं देगा;)। लेकिन इसे इंगित करने के लिए धन्यवाद। और यदि आप कोड 200 प्राप्त कर रहे हैं तो यह सर्वर से सफलता प्रतिक्रिया होनी चाहिए। 200 "स्थिति ठीक है" के लिए खड़ा है। –

+0

हां लेकिन मुझे प्राप्त प्रतिक्रिया का मतलब है कि सर्वर को कोई इनपुट नहीं मिला है, मैं एपीआई पर काम करने वाले लड़के से बात करने की कोशिश करूंगा (समस्या वहां होनी चाहिए) लेकिन उसने आज मेरे ईमेल का जवाब नहीं दिया –

1

इस कोड पर एक नज़र

https://gist.github.com/9457c486af9644cf6b18

retrieveJSONArray (ArrayList jsonArray, String [] कुंजी) और retrieveJSONString (ArrayList JSONObject) देखें

+0

बिल्कुल ठीक नहीं था लेकिन यह वुड मदद .... + 1 .... –

+0

आप जेएसओएन स्ट्रिंग बनाना चाहते थे ....... मूल तर्क जेएसओएनस्ट्रिंग को पुनः प्राप्त करने में है, लेकिन यह मेरे तर्क के अनुसार अनुकूलित किया गया है और आवश्यकता ....... – viv

8

यदि आपके पास है JSON पहले से स्ट्रिंग के रूप में, बस नियमित HTTP कनेक्शन (URL.openConnection()) का उपयोग करके इसे पोस्ट करें। इसे पर्स करने या उस तरह कुछ भी करने की ज़रूरत नहीं है।

+1

कोई विचार नहीं कि यह क्यों ऊपर नहीं था। –

+0

कृपया आगे विस्तृत करें ... धन्यवाद! –

1
JSONObject returnedJObject= new JSONObject(); 

url = "http://49.50.76.75/website/exxx/api.php"; 

// makeSignupRequest(); 

try { 
    returnedJObject.put("email",eemail); 
    returnedJObject.put("password",passwrd); 
    returnedJObject.put("type","customer"); 
    returnedJObject.put("method","register"); 
    returnedJObject.put("username",usr); 

    try { 
     putDataToServer(url, returnedJObject); 

    } 
    catch (Throwable m) { 
     m.printStackTrace(); 
    } 
} 
+0

और putdatatoserver() विधि का उपयोग करें। लेकिन सर्वर अंत से काम नहीं कर रहा है –

0

यदि यह सिर्फ एक या दो सेवा के साथ कुछ भी एक "शौक" एप्लिकेशन के अलावा अन्य है बनाने के लिए कहता है, मैं एक async HTTP या बाकी पुस्तकालय को देख पर विचार होगा।

कई लायक विचार कर रहे हैं, गूगल से वॉली सहित: https://developer.android.com/training/volley/index.html

और चौक से पुराना वापस: जबकि रेट्रोफिट विशेष रूप से एक बाकी ग्राहक को लागू करने पर केंद्रित है http://square.github.io/retrofit

वॉली, अच्छा सामान्य प्रयोजन async HTTP पुस्तकालय है।

इनमें से दोनों पुस्तकालय आपके उदाहरण में निम्न स्तर के विस्तार से निपटेंगे।

चाहे आप अपने डिफ़ॉल्ट एचटीपी क्लाइंट कोड का उपयोग करना जारी रखते हैं, या वॉली या रेट्रोफिट का उपयोग करना जारी रखते हैं, तो आप निश्चित रूप से यह सुनिश्चित करना चाहते हैं कि आपके नेटवर्क अनुरोध पृष्ठभूमि थ्रेड पर हों ताकि आप यूआई थ्रेड को अवरुद्ध न करें। यह आपके उदाहरण से स्पष्ट नहीं है कि आप ऐसा कर रहे हैं या नहीं।

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