অ্যান্ড্রয়েডের সাথে অনুরোধের তুলনায় কীভাবে JSON অবজেক্ট পাঠাবেন?


115

আমি নিম্নলিখিত JSON পাঠ্যটি প্রেরণ করতে চাই

{"Email":"aaa@tbbb.com","Password":"123456"}

একটি ওয়েব পরিষেবাতে এবং প্রতিক্রিয়া পড়ুন। আমি জেএসএন পড়তে জানি। সমস্যাটি হ'ল উপরের JSON অবজেক্টটি অবশ্যই একটি চলক নামে প্রেরণ করতে হবে jason

আমি কীভাবে এন্ড্রয়েড থেকে এটি করতে পারি? অনুরোধ অবজেক্ট তৈরি করা, বিষয়বস্তু শিরোনাম সেট করা ইত্যাদি ধাপগুলি কী কী?

উত্তর:


97

অ্যানড্রয়েডের HTTP প্রেরণ ও গ্রহণের জন্য বিশেষ কোড নেই, আপনি মানক জাভা কোড ব্যবহার করতে পারেন। আমি অ্যাপাডে এইচটিটিপি ক্লায়েন্ট ব্যবহার করার পরামর্শ দেব যা অ্যান্ড্রয়েডের সাথে আসে। আমি এইচটিটিপি পোস্ট পাঠাতে ব্যবহৃত কোডের একটি স্নিপেট এখানে।

"জেসন" নামের একটি ভেরিয়েবলে অবজেক্টটি পাঠানোর কোনও কিছুর সাথে কী আছে তা আমি বুঝতে পারি না। আপনি যদি নিশ্চিত না হন যে সার্ভারটি ঠিক কী চায় তবে সার্ভারে বিভিন্ন স্ট্রিং প্রেরণের জন্য একটি পরীক্ষা প্রোগ্রাম লেখার বিষয়টি বিবেচনা করুন যতক্ষণ না আপনি জানেন যে এটি কী ফর্ম্যাটে থাকতে হবে।

int TIMEOUT_MILLISEC = 10000;  // = 10 seconds
String postMessage="{}"; //HERE_YOUR_POST_STRING.
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpClient client = new DefaultHttpClient(httpParams);

HttpPost request = new HttpPost(serverUrl);
request.setEntity(new ByteArrayEntity(
    postMessage.toString().getBytes("UTF8")));
HttpResponse response = client.execute(request);

21
পোস্টমেসেজ কি কোনও জেএসওএন অবজেক্ট?
অ্যান্ড্রয়েডদেভ

postMessageসংজ্ঞায়িত করা হয়নি
র‌্যাপটার

সময়সীমা কী?
সিংহ 789

একের বেশি স্ট্রিং পার হলে কী হবে? postMessage2.toString ()। getBytes ("UTF8")
ময়ূর আর আমিপারা

কোনও পজোকে জসন স্ট্রিংয়ে রূপান্তর করার পরামর্শ?
tgkprog

155

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

    protected void sendJson(final String email, final String pwd) {
        Thread t = new Thread() {

            public void run() {
                Looper.prepare(); //For Preparing Message Pool for the child Thread
                HttpClient client = new DefaultHttpClient();
                HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
                HttpResponse response;
                JSONObject json = new JSONObject();

                try {
                    HttpPost post = new HttpPost(URL);
                    json.put("email", email);
                    json.put("password", pwd);
                    StringEntity se = new StringEntity( json.toString());  
                    se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                    post.setEntity(se);
                    response = client.execute(post);

                    /*Checking response */
                    if(response!=null){
                        InputStream in = response.getEntity().getContent(); //Get the data in the entity
                    }

                } catch(Exception e) {
                    e.printStackTrace();
                    createDialog("Error", "Cannot Estabilish Connection");
                }

                Looper.loop(); //Loop in the message queue
            }
        };

        t.start();      
    }

আপনি জেএসএন প্রেরণ এবং পুনরুদ্ধার করতে গুগল জিসন ব্যবহার করতে পারেন ।


হাই কি সম্ভব হতে পারে যে সার্ভারটি আমাকে একটি শিরোনাম সরিয়ে জেএসওন শিরোনাম স্থাপন করতে এবং সেই শিরোনামে জসন সামগ্রী যুক্ত করে? আমি url এইচটিপিপোস্ট পোস্ট হিসাবে প্রেরণ করছি = নতুন এইচটিপিপিস্ট (" abc.com/xyz/usersgetuserdetails" ); তবে এটি বলার কারণে অবৈধ অনুরোধ ত্রুটি। কোডটির রিমাইন্ডার একই। দ্বিতীয়ত জেসন = হেডার = নতুন জেএসএনওবজেক্ট () কী করে; এখানে কী হচ্ছে
অ্যান্ড্রয়েডদেভ

সার্ভারের কাছ থেকে কী ধরনের অনুরোধ আশা করা যায় তা আমি নিশ্চিত নই। এই হিসাবে 'json = শিরোলেখ = নতুন JSONObject (); 'এটি কেবল 2 জসন বস্তু তৈরি করছে।
আদিম পাপ্পাচান

@ প্রিম্পপ - এমন কি কোনও সুযোগ রয়েছে যে আপনি এটির সাথে যেতে একটি সাধারণ পিএইচপি স্ক্রিপ্ট সরবরাহ করতে সক্ষম হতে পারেন? আমি আপনার কোডটি বাস্তবায়নের চেষ্টা করেছি, তবে আমার জীবনের জন্য আমি NULL ব্যতীত অন্য কিছু প্রেরণ করতে পারিনি।
কুবিজে 21

আপনি ইনপুটস্পটস্ট্রিম থেকে আউটপুট পেতে পারেন (এখানে বস্তুতে) স্ট্রিং রাইটার এর মতো স্ট্রিং হিসাবে = নতুন স্ট্রিং রাইটার (); আইউইটিসকোপি (লেখক, "ইউটিএফ -8"); স্ট্রিং স্ট্রিং = Writer.toString ();
ইয়েক্মার সিমসেক

35
public void postData(String url,JSONObject obj) {
    // Create a new HttpClient and Post Header

    HttpParams myParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(myParams, 10000);
    HttpConnectionParams.setSoTimeout(myParams, 10000);
    HttpClient httpclient = new DefaultHttpClient(myParams );
    String json=obj.toString();

    try {

        HttpPost httppost = new HttpPost(url.toString());
        httppost.setHeader("Content-type", "application/json");

        StringEntity se = new StringEntity(obj.toString()); 
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        httppost.setEntity(se); 

        HttpResponse response = httpclient.execute(httppost);
        String temp = EntityUtils.toString(response.getEntity());
        Log.i("tag", temp);


    } catch (ClientProtocolException e) {

    } catch (IOException e) {
    }
}

আমি এএসপি.নেট এমভিসি সার্ভারে জেসন অবজেক্টটি পোস্ট করেছি। আমি কীভাবে এএসপি.নেট সার্ভারে একই জসন স্ট্রিংটিকে জিজ্ঞাসা করতে পারি?
কার্তিক

19

HttpPostঅ্যান্ড্রয়েড API লেভেল 22. সুতরাং, ব্যবহার করুন দ্বারা অবচিত HttpUrlConnectionআরও জন্য।

public static String makeRequest(String uri, String json) {
    HttpURLConnection urlConnection;
    String url;
    String data = json;
    String result = null;
    try {
        //Connect 
        urlConnection = (HttpURLConnection) ((new URL(uri).openConnection()));
        urlConnection.setDoOutput(true);
        urlConnection.setRequestProperty("Content-Type", "application/json");
        urlConnection.setRequestProperty("Accept", "application/json");
        urlConnection.setRequestMethod("POST");
        urlConnection.connect();

        //Write
        OutputStream outputStream = urlConnection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        writer.write(data);
        writer.close();
        outputStream.close();

        //Read
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));

        String line = null;
        StringBuilder sb = new StringBuilder();

        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }

        bufferedReader.close();
        result = sb.toString();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return result;
}

1
গৃহীত উত্তর অবচয় করা হয়েছে এবং এই পদ্ধতিটি আরও ভাল
কোডারবিসি

8

অ্যান্ড্রয়েড এইচটিটিপি-র জন্য আশ্চর্যজনকভাবে একটি দুর্দান্ত লাইব্রেরি রয়েছে নীচের লিঙ্কটিতে:

http://loopj.com/android-async-http/

সাধারণ অনুরোধগুলি খুব সহজ:

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});

Https://github.com/loopj/android-async-http/issues/125- এ JSON (`voidberg- তে ক্রেডিট) প্রেরণ করতে :

// params is a JSONObject
StringEntity se = null;
try {
    se = new StringEntity(params.toString());
} catch (UnsupportedEncodingException e) {
    // handle exceptions properly!
}
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

client.post(null, "www.example.com/objects", se, "application/json", responseHandler);

এটি সমস্ত অ্যাসিঙ্ক্রোনাস, অ্যান্ড্রয়েডের সাথে ভাল কাজ করে এবং আপনার ইউআই থ্রেড থেকে কল করা নিরাপদ। প্রতিক্রিয়াহ্যান্ডলারটি আপনার তৈরি করা একই থ্রেডে চলবে (সাধারণত, আপনার ইউআই থ্রেড)। এমনকি এটিতে জেএসএনের জন্য বিল্ট-ইন রেজোনসহ্যান্ডলার রয়েছে, তবে আমি গুগল জিএসএস ব্যবহার করতে পছন্দ করি।


আপনি জানেন যে ন্যূনতম এসডিকে এইটি চলে?
Esko918

আমি অবাক হব যদি এটির জিওআই না হওয়ায় এটির ন্যূনতম ছিল। কেন চেষ্টা করে দেখুন না এবং আপনার অনুসন্ধানগুলি পোস্ট করুন।
অ্যালেক্স

1
ঠিক আছে আমি পরিবর্তে নেটিভ গ্রন্থাগারগুলি ব্যবহার করার সিদ্ধান্ত নিয়েছি। অ্যান্ড্রয়েডে মোটামুটি নতুন এবং সে সম্পর্কে আরও তথ্যের তথ্য রয়েছে। আমি সত্যিই একটি iOS দেব। এটি কেবলমাত্র প্ল্যাগিংয়ের পরিবর্তে এবং কারও এলিস কোডের সাথে খেলার পরিবর্তে সমস্ত দস্তাবেজগুলিতে পড়ার পরে এটি আরও ভাল। যদিও ধন্যবাদ
Esko918

3

এখন যেহেতু HttpClientএটিকে অবমূল্যায়ন করা হয়েছে বর্তমান ওয়ার্কিং কোডটি HttpUrlConnectionসংযোগটি তৈরি করতে এবং সংযোগটি থেকে লিখতে এবং পড়তে ব্যবহার করা হয়। তবে আমি ভলি ব্যবহার পছন্দ করতাম । এই গ্রন্থাগারটি অ্যান্ড্রয়েড এওএসপি থেকে। আমি তৈরি করতে JsonObjectRequestবা ব্যবহার করতে খুব সহজ পেয়েছিJsonArrayRequest


2

এর চেয়ে সহজ কিছুই হতে পারে না। OkHttpLibrary ব্যবহার করুন

আপনার json তৈরি করুন

JSONObject requestObject = new JSONObject();
requestObject.put("Email", email);
requestObject.put("Password", password);

এবং এটি পাঠান।

OkHttpClient client = new OkHttpClient();

RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
            .addHeader("Content-Type","application/json")
            .url(url)
            .post(requestObject.toString())
            .build();

okhttp3.Response response = client.newCall(request).execute();

ওখট্টপ্পে নির্দেশ করার জন্য উত্সাহিত, যা একটি দরকারী গ্রন্থাগার, তবে প্রদত্ত কোডটি তেমন সাহায্য করে না। উদাহরণস্বরূপ, রিকোয়েস্টবিডি.ক্রিয়েট () এ কী যুক্তিগুলি পাস করা হয়েছে? আরও তথ্যের জন্য এই লিঙ্কটি দেখুন: vogella.com
জাভালিবারি- ওক

0
public class getUserProfile extends AsyncTask<Void, String, JSONArray> {
    JSONArray array;
    @Override
    protected JSONArray doInBackground(Void... params) {

        try {
            commonurl cu = new commonurl();
            String u = cu.geturl("tempshowusermain.php");
            URL url =new URL(u);
          //  URL url = new URL("http://192.168.225.35/jabber/tempshowusermain.php");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setRequestProperty("Content-Type", "application/json");
            httpURLConnection.setRequestProperty("Accept", "application/json");
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            httpURLConnection.setDoInput(true);
            httpURLConnection.connect();

            JSONObject jsonObject=new JSONObject();
            jsonObject.put("lid",lid);


            DataOutputStream outputStream = new DataOutputStream(httpURLConnection.getOutputStream());
            outputStream.write(jsonObject.toString().getBytes("UTF-8"));

            int code = httpURLConnection.getResponseCode();
            if (code == 200) {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));

                StringBuffer stringBuffer = new StringBuffer();
                String line;

                while ((line = bufferedReader.readLine()) != null) {
                    stringBuffer.append(line);
                }
                object =  new JSONObject(stringBuffer.toString());
             //   array = new JSONArray(stringBuffer.toString());
                array = object.getJSONArray("response");

            }

        } catch (Exception e) {

            e.printStackTrace();
        }
        return array;


    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();



    }

    @Override
    protected void onPostExecute(JSONArray array) {
        super.onPostExecute(array);
        try {
            for (int x = 0; x < array.length(); x++) {

                object = array.getJSONObject(x);
                ComonUserView commUserView=new ComonUserView();//  commonclass.setId(Integer.parseInt(jsonObject2.getString("pid").toString()));
                //pidArray.add(jsonObject2.getString("pid").toString());

                commUserView.setLid(object.get("lid").toString());
                commUserView.setUname(object.get("uname").toString());
                commUserView.setAboutme(object.get("aboutme").toString());
                commUserView.setHeight(object.get("height").toString());
                commUserView.setAge(object.get("age").toString());
                commUserView.setWeight(object.get("weight").toString());
                commUserView.setBodytype(object.get("bodytype").toString());
                commUserView.setRelationshipstatus(object.get("relationshipstatus").toString());
                commUserView.setImagepath(object.get("imagepath").toString());
                commUserView.setDistance(object.get("distance").toString());
                commUserView.setLookingfor(object.get("lookingfor").toString());
                commUserView.setStatus(object.get("status").toString());

                cm.add(commUserView);
            }
            custuserprof = new customadapterformainprofile(getActivity(),cm,Tab3.this);
          gridusername.setAdapter(custuserprof);
            //  listusername.setAdapter(custuserprof);
            } catch (Exception e) {

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