অ্যান্ড্রয়েডে কোনও HTTP GET অনুরোধে পরামিতিগুলি কীভাবে যুক্ত করবেন?


119

আমার কাছে একটি HTTP জিইটি অনুরোধ রয়েছে যা আমি প্রেরণের চেষ্টা করছি। আমি প্রথমে কোনও BasicHttpParamsবস্তু তৈরি করে এবং সেই বস্তুর সাথে পরামিতিগুলি যুক্ত করে, তারপরে setParams( basicHttpParms )আমার HttpGetঅবজেক্টটিতে কল করে এই অনুরোধটিতে পরামিতিগুলি যুক্ত করার চেষ্টা করেছি । এই পদ্ধতি ব্যর্থ হয়। তবে আমি যদি ম্যানুয়ালি আমার ইউআরএলে আমার পরামিতিগুলি যুক্ত করি (যেমন সংযোজন ?param1=value1&param2=value2) এটি সফল হয়।

আমি জানি আমি এখানে কিছু মিস করছি এবং কোনও সাহায্যের প্রশংসা করা হবে।


1
জিইটি অনুরোধের জন্য, দ্বিতীয় পদ্ধতিটি হ'ল প্যারামিটার যুক্ত করার সঠিক উপায়। আমি আশা করি প্রথম পদ্ধতির পোষ্ট পদ্ধতিগুলির জন্য।
জেমস ব্ল্যাক

উত্তর:


225

আমি চাইলে url স্ট্রিংটি তৈরি করতে আমি নামভ্যালিউপায়ার এবং ইউআরএলসিএনকোডেড ইউটিলের একটি তালিকা ব্যবহার করি।

protected String addLocationToUrl(String url){
    if(!url.endsWith("?"))
        url += "?";

    List<NameValuePair> params = new LinkedList<NameValuePair>();

    if (lat != 0.0 && lon != 0.0){
        params.add(new BasicNameValuePair("lat", String.valueOf(lat)));
        params.add(new BasicNameValuePair("lon", String.valueOf(lon)));
    }

    if (address != null && address.getPostalCode() != null)
        params.add(new BasicNameValuePair("postalCode", address.getPostalCode()));
    if (address != null && address.getCountryCode() != null)
        params.add(new BasicNameValuePair("country",address.getCountryCode()));

    params.add(new BasicNameValuePair("user", agent.uniqueId));

    String paramString = URLEncodedUtils.format(params, "utf-8");

    url += paramString;
    return url;
}

আমি রাজী. আমি ফিরে গিয়েছি এবং এটি পরিবর্তন করেছি কারণ এই পদ্ধতিটি বৃহত পরিমাণে পরামিতিগুলির জন্য অর্থবোধ করে। প্রথম গৃহীত উত্তরটি এখনও দুর্দান্ত কাজ করে তবে পরামিতিগুলির বড় সেটগুলির জন্য বিভ্রান্তিকর হতে পারে।
গোরসি

@ ব্রায়ান গ্রিফি ভাল সমাধানের জন্য ধন্যবাদ। তবে আমার কাছে প্যারামিটারটি পাস করার জন্য কিছুটা আলাদা ফর্ম্যাট আছে, কেউ কি এই প্যারামিটারটি পাস করতে আমাকে সহায়তা করতে পারেন ..? এই ক্ষেত্রে পরামিতি কীভাবে পাস করবেন? ডেটা = 'cred "শংসাপত্র": {"accesToken": "668f514678c7e7f5e71a07044935d94c", "ACK": "cf3bb509623a8e8fc032a08098d9f7b3"}, "restIn": user "আইডি, list", তালিকা
যোগ গুরু

1
অন্য উত্তরটি সহজ ক্ষেত্রে খুব খাটো এবং সহজ। এটি ভুল নয়, এবং বিবেচনা করার মতো।
qris

2
<NameValuePair> এর তালিকা অ্যান্ড্রয়েড এপিআই স্তরে 22
অবহিত হয়েছে

@ সিমোনমিয়ার: ইউরি.বিল্ডার () ব্যবহার করুন। নীচে উত্তর দেখুন।
বিহান ভার্মা

95

ইউটি তৈরির জন্য প্যারামিটারগুলি তৈরি করতে, ইউরি.বিল্ডার আরও কার্যকর উপায় সরবরাহ করে।

Uri uri = new Uri.Builder()
    .scheme("http")
    .authority("foo.com")
    .path("someservlet")
    .appendQueryParameter("param1", foo)
    .appendQueryParameter("param2", bar)
    .build();

এছাড়াও ফাইলের পরামিতিগুলি হ্যান্ডেল করা যায় না
সিয়ামি

@ bizso09 "ফাইলের পরামিতি" বলতে কি আপনি কোয়েরি এবং টুকরা বোঝাচ্ছেন? তারা উভয়ই নির্মাতার দ্বারা স্থিরযোগ্য। ইউআরআই পরিভাষার জন্য এটি দেখুন, এটি আমাকে অনেক বিকাশকারীকে
ডিভিডি

কীভাবে ক্যোয়ারী প্যারামিটার সরাবেন? বিদ্যমান ক্যোয়ারী প্যারামিটারের মান কীভাবে পরিবর্তন করবেন?
পাইওটার

একটি স্পষ্ট পদ্ধতি বিকাশকারী রয়েছে and Android.com/references/android/net/… । পরিমার্জন করতে, ধরে নিন যে আপনার প্রশ্নের একটি তালিকা রয়েছে, তালিকার মান আপডেট করুন, ক্লিয়ারকোয়ারি () এবং তারপরে তালিকার লুপে অ্যাপেন্ডকুয়েরপ্যারামিটার কল করুন। তবে প্রতিবারের মতো নতুন কেন তৈরি করবেন না?
9

31

এইচটিটিপি কম্পোনেন্ট হিসাবে 4.2+একটি নতুন ক্লাস ইউআরআইবিল্ডার রয়েছে , যা ইউআরআই উত্পাদন করার জন্য সুবিধাজনক উপায় সরবরাহ করে।

আপনি স্ট্রিং ইউআরএল থেকে সরাসরি ইউআরআই তৈরি করতে ব্যবহার করতে পারেন:

List<NameValuePair> listOfParameters = ...;

URI uri = new URIBuilder("http://example.com:8080/path/to/resource?mandatoryParam=someValue")
    .addParameter("firstParam", firstVal)
    .addParameter("secondParam", secondVal)
    .addParameters(listOfParameters)
    .build();

অন্যথায়, আপনি সমস্ত পরামিতি স্পষ্টভাবে নির্দিষ্ট করতে পারেন:

URI uri = new URIBuilder()
    .setScheme("http")
    .setHost("example.com")
    .setPort(8080)
    .setPath("/path/to/resource")
    .addParameter("mandatoryParam", "someValue")
    .addParameter("firstParam", firstVal)
    .addParameter("secondParam", secondVal)
    .addParameters(listOfParameters)
    .build();

একবার আপনি URIবস্তু তৈরি করার পরে, কেবল আপনাকে কেবল HttpGetঅবজেক্ট তৈরি করতে হবে এবং এটি সম্পাদন করতে হবে:

//create GET request
HttpGet httpGet = new HttpGet(uri);
//perform request
httpClient.execute(httpGet ...//additional parameters, handle response etc.

28

পদ্ধতি

setParams() 

মত

httpget.getParams().setParameter("http.socket.timeout", new Integer(5000));

কেবল এইচটিটিপিপ্রোটোকল পরামিতি যুক্ত করে।

HTGet কার্যকর করতে আপনার নিজের পরামিতিগুলি ইউআরএলটিতে ম্যানুয়ালি যুক্ত করা উচিত

HttpGet myGet = new HttpGet("http://foo.com/someservlet?param1=foo&param2=bar");

বা পোস্ট অনুরোধটি ব্যবহারের জন্য অনুরোধটি পাওয়া এবং পোস্টের অনুরোধগুলির মধ্যে পার্থক্যটি এখানে ব্যাখ্যা করা হয়েছে , যদি আপনি আগ্রহী হন


1
আপনার সাহায্যের জন্য ধন্যবাদ। আমি ভেবেছিলাম জিইটি অনুরোধগুলিতে প্যারামিটার যুক্ত করার আরও কার্যকর উপায় থাকতে পারে।
গৌরবময়

8
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("param1","value1");

String query = URLEncodedUtils.format(params, "utf-8");

URI url = URIUtils.createURI(scheme, userInfo, authority, port, path, query, fragment); //can be null
HttpGet httpGet = new HttpGet(url);

ইউআরআই জাভাদোক

দ্রষ্টব্য: url = new URI(...)বগি


4
    HttpClient client = new DefaultHttpClient();

    Uri.Builder builder = Uri.parse(url).buildUpon();

    for (String name : params.keySet()) {
        builder.appendQueryParameter(name, params.get(name).toString());
    }

    url = builder.build().toString();
    HttpGet request = new HttpGet(url);
    HttpResponse response = client.execute(request);
    return EntityUtils.toString(response.getEntity(), "UTF-8");

0

আপনার যদি অবিচ্ছিন্ন থাকে তবে URLআমি অ্যাপাচি HTTP-তে বিল্টিকৃত সহজ -অনুরোধ ব্যবহার করার পরামর্শ দিচ্ছি ।

আপনি নিম্নলিখিত হিসাবে আপনার ক্লায়েন্ট তৈরি করতে পারেন:

private filan static HttpRequest<YourResponseType> httpRequest = 
                   HttpRequestBuilder.createGet(yourUri,YourResponseType)
                   .build();

public void send(){
    ResponseHendler<YourResponseType> rh = 
         httpRequest.execute(param1, value1, param2, value2);

    handler.ifSuccess(this::whenSuccess).otherwise(this::whenNotSuccess);
}

public void whenSuccess(ResponseHendler<YourResponseType> rh){
     rh.ifHasContent(content -> // your code);
}

public void whenSuccess(ResponseHendler<YourResponseType> rh){
   LOGGER.error("Status code: " + rh.getStatusCode() + ", Error msg: " + rh.getErrorText());
}

দ্রষ্টব্য: আপনার প্রতিক্রিয়াটি পরিচালনা করার জন্য অনেকগুলি দরকারী পদ্ধতি রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.