2016-01-16 4 views
12

मैं OKHTTP 3.x संस्करण का उपयोग कर रहा हूं। मैं एकाधिक पैरामीटर पोस्ट करना चाहता हूं और लूप में पैरा जोड़ना चाहता हूं। मुझे पता है कि संस्करण 2.x में, मैं FormEncodingBuilder का उपयोग कर सकता हूं और इसमें लूप में पैरा जोड़ सकता हूं और उसके बाद एक अनुरोध निकाय बना सकता हूं। लेकिन 3.x में, कक्षा को हटा दिया गया है।एंड्रॉइड में OKHTTP 3.x में पोस्ट पैरामीटर गतिशील रूप से (या लूप में) कैसे भेजें?

RequestBody formBody = new FormBody.Builder() 
      .add("Param1", value1) 
      .add("Param2", value2) 
      .build(); 
Request request = new Request.Builder() 
      .url("url") 
      .post(formBody) 
      .build(); 

अब मैं 5 पैरामीटर जोड़ना चाहते हैं, लेकिन एक पाश अर्थात में एक पाश में formbody का निर्माण करके बनाने के अनुरोध के मुख्य:

यहाँ मेरे वर्तमान कोड है। जैसा मैंने ऊपर लिखा है, मुझे पता है कि इसे OKHTTP संस्करण 2.x में कैसे करना है, लेकिन मैं संस्करण 3.x का उपयोग कर रहा हूं।

कोई भी मदद या मार्गदर्शन की सराहना की जाती है।

धन्यवाद अग्रिम

+0

मैंने इस पर कोई हाथ नहीं किया है लेकिन पहली बार जब आप जेसनऑब्जेक्ट को 5 पैराम बनाते हैं और अपने फॉर्म में उस एकल जेसन ऑब्जेक्ट को पास कर सकते हैं, लेकिन ऐसा लगता है कि यह ऑब्जेक्ट स्वीकार करता है। – VVB

उत्तर

21

है यहां बताया गया है कि मैं यह कर:

FormBody.Builder formBuilder = new FormBody.Builder() 
     .add("key", "123"); 

// dynamically add more parameter like this: 
formBuilder.add("phone", "000000"); 

RequestBody formBody = formBuilder.build(); 

Request request = new Request.Builder() 
       .url("https://aaa.com") 
       .post(formBody) 
       .build(); 
0

में मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन आप ऐसा ही कुछ करने की कोशिश कर सकते हैं:

RequestBody formBody = new FormBody.Builder(); 
for(...;...;...) { 
    formBody.add(...) 
} 
formBody.build(); 

अपने कोड के बाकी अच्छा लगता है। आशा है कि यह काम करेगा :)!

+0

यह काम नहीं करता है, पहले से ही कोशिश की है। FormBody.builder अनुरोधबॉडी वापस नहीं करता है। असंगत प्रकार। :( –

11

आयात

import okhttp3.OkHttpClient; 
import okhttp3.FormBody; 
import okhttp3.Request; 
import okhttp3.RequestBody; 

कोड:

// HashMap with Params 
HashMap<String, String> params = new HashMap<>(); 
params.put("Param1", "A"); 
params.put("Param2", "B"); 

// Initialize Builder (not RequestBody) 
FormBody.Builder builder = new FormBody.Builder(); 

// Add Params to Builder 
for (Map.Entry<String, String> entry : params.entrySet()) { 
    builder.add(entry.getKey(), entry.getValue()); 
} 

// Create RequestBody 
RequestBody formBody = builder.build(); 

// Create Request (same) 
Request request = new Request.Builder() 
     .url("url") 
     .post(formBody) 
     .build(); 
1

यहाँ मेरी संस्करण

/** 
* <strong>Uses:</strong><br/> 
* <p> 
* {@code 
* List<Pair<String, String>> pairs = new ArrayList<>();} 
* <br/> 
* {@code pairs.add(new Pair<>("key1", "value1"));}<br/> 
* {@code pairs.add(new Pair<>("key2", "value2"));}<br/> 
* {@code pairs.add(new Pair<>("key3", "value3"));}<br/> 
* <br/> 
* {@code postToServer("http://www.example.com/", pairs);}<br/> 
* </p> 
* 
* @param url 
* @param pairs List of support.V4 Pair 
* @return response from server in String format 
* @throws Exception 
*/ 
public String postToServer(String url, List<Pair<String, String>> pairs) throws Exception { 
    okhttp3.OkHttpClient client = new okhttp3.OkHttpClient(); 
    okhttp3.Request.Builder builder = new okhttp3.Request.Builder().url(url); 

    if (pairs != null) { 
     okhttp3.FormBody.Builder postData = new okhttp3.FormBody.Builder(); 
     for (Pair<String, String> pair : pairs) { 
      postData.add(pair.first, pair.second); 
     } 
     builder.post(postData.build()); 
    } 
    okhttp3.Request request = builder.build(); 
    okhttp3.Response response = client.newCall(request).execute(); 
    if (!response.isSuccessful()) { 
     throw new IOException(response.message() + " " + response.toString()); 
    } 
    return response.body().string(); 
} 
संबंधित मुद्दे