অ্যান্ড্রয়েডে POST ডেটা প্রেরণ


286

আমি পিএইচপি, জাভাস্ক্রিপ্ট এবং অন্যান্য স্ক্রিপ্টিং অনেকগুলি ভাষা নিয়ে অভিজ্ঞ, তবে জাভা বা অ্যান্ড্রয়েড নিয়ে আমার প্রচুর অভিজ্ঞতা নেই।

আমি পিএইচপি স্ক্রিপ্টে পোষ্ট ডেটা প্রেরণ এবং ফলাফল প্রদর্শন করার জন্য একটি উপায় খুঁজছি ।

উত্তর:


315

* আপডেট হওয়া উত্তর যা অ্যান্ড্রয়েড 6.0+ এ কাজ করে। মন্তব্যের জন্য @ রোহিত সুথার , @ টমিস বলওয়ারি এবং @ সুধিস্করকে ধন্যবাদ জানাই । *

    public class CallAPI extends AsyncTask<String, String, String> {

        public CallAPI(){
            //set context variables if required
        }

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

         @Override
         protected String doInBackground(String... params) {
            String urlString = params[0]; // URL to call
            String data = params[1]; //data to post
            OutputStream out = null;

            try {
                URL url = new URL(urlString);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                out = new BufferedOutputStream(urlConnection.getOutputStream());

                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
                writer.write(data);
                writer.flush();
                writer.close();
                out.close();

                urlConnection.connect();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }

তথ্যসূত্র:

পুরানো উত্তর

দ্রষ্টব্য: এই সমাধানটি পুরানো। এটি কেবল 5.1 পর্যন্ত অ্যান্ড্রয়েড ডিভাইসে কাজ করে। অ্যান্ড্রয়েড .0.০ এবং তারপরে এই জবাবটিতে ব্যবহৃত অ্যাপাচি এইচপি ক্লায়েন্টকে অন্তর্ভুক্ত করবেন না।

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

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
} 

15
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));UTF-8এনকন্ডিংয়ের জন্য
ম্যাকারে

57
" HttpClient", " HttpPost", " HttpResponse", " HttpEntity", " EntityUtils", " NameValuePair", " BasicNameValuePair" হ্রাস করা হয়েছে। দয়া করে অন্য একটি সমাধান প্রস্তাব করুন।
রোহিত সুথার

8
এছাড়াও DefaultHttpClientঅসমর্থিত হয়েছে।
ওয়েডনি ইউরি

45
এটি - আপডেট - উত্তর কিছুই পোস্ট করে না। এটা কি পারে?
তামেস বল্ভুরি

26
এটি NOTএকটি POSTউদাহরণ দেখায় না । 6.0উত্তরটি সম্পাদনা করে ভাল লাগবে । এটি সার্চ ইঞ্জিনটি প্রথম ফলাফল হিসাবে দেখানোর জন্য অনুকূলিত, যা এক ধরণের বিভ্রান্তিকর।
সুধিস্কর

93

জন্য অ্যান্ড্রয়েড => 5

Org.apache.http ক্লাস এবং AndroidHttpClient বর্গ হয়েছে অবচিত মধ্যে অ্যান্ড্রয়েড 5.1 । এই ক্লাসগুলি আর রক্ষণাবেক্ষণ করা হচ্ছে না এবং আপনার যত তাড়াতাড়ি সম্ভব ইউআরএল কানেকশন ক্লাসে এই API গুলি ব্যবহার করে কোনও অ্যাপ কোড স্থানান্তরিত করা উচিত ।

https://developer.android.com/about/versions/android-5.1.html#http

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

public String  performPostCall(String requestURL,
        HashMap<String, String> postDataParams) {

    URL url;
    String response = "";
    try {
        url = new URL(requestURL);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(15000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.setDoOutput(true);


        OutputStream os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(getPostDataString(postDataParams));

        writer.flush();
        writer.close();
        os.close();
        int responseCode=conn.getResponseCode();

        if (responseCode == HttpsURLConnection.HTTP_OK) {
            String line;
            BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
            while ((line=br.readLine()) != null) {
                response+=line;
            }
        }
        else {
            response="";    

        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return response;
}

...

private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException{
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for(Map.Entry<String, String> entry : params.entrySet()){
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        return result.toString();
    }

এছাড়াও আপনি পদ্ধতি পোস্ট করতে পারেন :

conn.setRequestMethod("POST");

21/02/2016 আপডেট করুন

জেসন সহ পোস্ট অনুরোধের জন্য , এই উদাহরণটি দেখুন:

public class Empty extends
        AsyncTask<Void, Void, Boolean> {

    String urlString = "http://www.yoursite.com/";

    private final String TAG = "post json example";
    private Context context;

    private int advertisementId;

    public Empty(Context contex, int advertisementId) {

        this.context = contex;
        this.advertisementId = advertisementId;
    }

    @Override
    protected void onPreExecute() {
        Log.e(TAG, "1 - RequestVoteTask is about to start...");

    }

    @Override
    protected Boolean doInBackground(Void... params) {
        boolean status = false;

        String response = "";
        Log.e(TAG, "2 - pre Request to response...");

        try {
            response = performPostCall(urlString, new HashMap<String, String>() {

                        private static final long serialVersionUID = 1L;

                        {
                            put("Accept", "application/json");
                            put("Content-Type", "application/json");
                        }
                    });
            Log.e(TAG, "3 - give Response...");
            Log.e(TAG, "4 " + response.toString());
        } catch (Exception e) {
            // displayLoding(false);

            Log.e(TAG, "Error ...");
        }
        Log.e(TAG, "5 - after Response...");

        if (!response.equalsIgnoreCase("")) {
            try {
                Log.e(TAG, "6 - response !empty...");
                //
                JSONObject jRoot = new JSONObject(response);
                JSONObject d = jRoot.getJSONObject("d");

                int ResultType = d.getInt("ResultType");
                Log.e("ResultType", ResultType + "");

                if (ResultType == 1) {

                    status = true;

                }

            } catch (JSONException e) {
                // displayLoding(false);
                // e.printStackTrace();
                Log.e(TAG, "Error " + e.getMessage());
            } finally {

            }
        } else {
            Log.e(TAG, "6 - response is empty...");

            status = false;
        }

        return status;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        //
        Log.e(TAG, "7 - onPostExecute ...");

        if (result) {
            Log.e(TAG, "8 - Update UI ...");

            // setUpdateUI(adv);
        } else {
            Log.e(TAG, "8 - Finish ...");

            // displayLoding(false);
            // finish();
        }

    }

    public String performPostCall(String requestURL,
                                  HashMap<String, String> postDataParams) {

        URL url;
        String response = "";
        try {
            url = new URL(requestURL);

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(context.getResources().getInteger(
                    R.integer.maximum_timeout_to_server));
            conn.setConnectTimeout(context.getResources().getInteger(
                    R.integer.maximum_timeout_to_server));
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);

            conn.setRequestProperty("Content-Type", "application/json");

            Log.e(TAG, "11 - url : " + requestURL);

            /*
             * JSON
             */

            JSONObject root = new JSONObject();
            //
            String token = Static.getPrefsToken(context);

            root.put("securityInfo", Static.getSecurityInfo(context));
            root.put("advertisementId", advertisementId);

            Log.e(TAG, "12 - root : " + root.toString());

            String str = root.toString();
            byte[] outputBytes = str.getBytes("UTF-8");
            OutputStream os = conn.getOutputStream();
            os.write(outputBytes);

            int responseCode = conn.getResponseCode();

            Log.e(TAG, "13 - responseCode : " + responseCode);

            if (responseCode == HttpsURLConnection.HTTP_OK) {
                Log.e(TAG, "14 - HTTP_OK");

                String line;
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        conn.getInputStream()));
                while ((line = br.readLine()) != null) {
                    response += line;
                }
            } else {
                Log.e(TAG, "14 - False - HTTP_OK");
                response = "";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }
}

আপডেট 24/08/2016

কিছু সেরা গ্রন্থাগার ব্যবহার করুন, যেমন:

কারণ :

  • এইচটিটিপিউরল সংযোগ এবং এইচটিটিপিপ্লাইেন্ট এড়িয়ে চলুন

নীচের এপিআই স্তরে (বেশিরভাগ জিঞ্জারব্রেড এবং ফ্রয়েওতে), এইচটিটিপিউরল সংযোগ এবং এইচটিটিপি ক্লিনেন্ট নিখুঁত হওয়া থেকে দূরে

  • এবং অ্যাসিঙ্কটাস্ককেও এড়িয়ে চলুন
  • তারা অনেক বেশি দ্রুততর
  • তারা সব কিছু ক্যাশে

হানিকম্ব (এপিআই 11) প্রবর্তনের পর থেকে মূল থ্রেড থেকে আলাদা আলাদা থ্রেডে নেটওয়ার্ক ক্রিয়াকলাপ পরিচালনা বাধ্যতামূলক করা হয়েছে


1
আপনার সমস্যার বর্ণনা দিন
আদনান আবদুল্লাহ জাকি

1
আমার এটি কাজ করছে তবে আমি এই ত্রুটিটি পেয়েছি: নেটওয়ার্কঅনমেনথ্রেডএক্সসেপশন
স্যাম

2
আপনাকে অবশ্যই এই পদ্ধতিটি মূল থ্রেডে নয়, অ্যাসিঙ্কটাস্কে ঘোষণা করতে হবে। কারণ আপনার ক্রিয়াকলাপের মূল থ্রেড 5 সেকেন্ডের মতো কোনও অগ্রগতি সমর্থন করে না। আপনি "নেটওয়ার্কঅনমেনথ্রেডএক্সসেপশন" গুগল করতে পারেন। আপনাকে অবশ্যই অ্যাসিঙ্কটাস্ক ব্যবহার করতে হবে, তারপরে, ডোইনব্যাকগ্রাউন্ডে, আমার পদ্ধতিটি ব্যবহার করুন।
আদনান আবদুল্লাহ জাকি

এর performPostCall() getPostData()সাথে প্রতিস্থাপন করা উচিতgetPostDataString()
মুহাম্মদ শাহজাদ

প্রথম পদ্ধতির জন্য, আপনি যেভাবে ডেটাটি সিরিয়ালাইজ করছেন তাতে প্রদত্ত, আপনি "অ্যাপ্লিকেশন / এক্স-এক্স-www-ফর্ম-urlencoded" একটি সামগ্রী ধরণের যুক্ত করতেও পারেন।
ব্যবহারকারী420667

49

এই পদ্ধতিতে আমরা HTTP পোস্ট পদ্ধতি সহ ডেটা প্রেরণ এবং ফলাফল পেতে পারি

     public class MyHttpPostProjectActivity extends Activity implements OnClickListener {

    private EditText usernameEditText;
    private EditText passwordEditText;
    private Button sendPostReqButton;
    private Button clearButton;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        usernameEditText = (EditText) findViewById(R.id.login_username_editText);
        passwordEditText = (EditText) findViewById(R.id.login_password_editText);

        sendPostReqButton = (Button) findViewById(R.id.login_sendPostReq_button);
        sendPostReqButton.setOnClickListener(this);

        clearButton = (Button) findViewById(R.id.login_clear_button);
        clearButton.setOnClickListener(this);        
    }

    @Override
    public void onClick(View v) {

        if(v.getId() == R.id.login_clear_button){
            usernameEditText.setText("");
            passwordEditText.setText("");
            passwordEditText.setCursorVisible(false);
            passwordEditText.setFocusable(false);
            usernameEditText.setCursorVisible(true);
            passwordEditText.setFocusable(true);
        }else if(v.getId() == R.id.login_sendPostReq_button){
            String givenUsername = usernameEditText.getEditableText().toString();
            String givenPassword = passwordEditText.getEditableText().toString();

            System.out.println("Given username :" + givenUsername + " Given password :" + givenPassword);

            sendPostRequest(givenUsername, givenPassword);
        }   
    }

    private void sendPostRequest(String givenUsername, String givenPassword) {

        class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{

            @Override
            protected String doInBackground(String... params) {

                String paramUsername = params[0];
                String paramPassword = params[1];

                System.out.println("*** doInBackground ** paramUsername " + paramUsername + " paramPassword :" + paramPassword);

                HttpClient httpClient = new DefaultHttpClient();

                // In a POST request, we don't pass the values in the URL.
                //Therefore we use only the web page URL as the parameter of the HttpPost argument
                HttpPost httpPost = new HttpPost("http://www.nirmana.lk/hec/android/postLogin.php");

                // Because we are not passing values over the URL, we should have a mechanism to pass the values that can be
                //uniquely separate by the other end.
                //To achieve that we use BasicNameValuePair             
                //Things we need to pass with the POST request
                BasicNameValuePair usernameBasicNameValuePair = new BasicNameValuePair("paramUsername", paramUsername);
                BasicNameValuePair passwordBasicNameValuePAir = new BasicNameValuePair("paramPassword", paramPassword);

                // We add the content that we want to pass with the POST request to as name-value pairs
                //Now we put those sending details to an ArrayList with type safe of NameValuePair
                List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
                nameValuePairList.add(usernameBasicNameValuePair);
                nameValuePairList.add(passwordBasicNameValuePAir);

                try {
                    // UrlEncodedFormEntity is an entity composed of a list of url-encoded pairs. 
                    //This is typically useful while sending an HTTP POST request. 
                    UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList);

                    // setEntity() hands the entity (here it is urlEncodedFormEntity) to the request.
                    httpPost.setEntity(urlEncodedFormEntity);

                    try {
                        // HttpResponse is an interface just like HttpPost.
                        //Therefore we can't initialize them
                        HttpResponse httpResponse = httpClient.execute(httpPost);

                        // According to the JAVA API, InputStream constructor do nothing. 
                        //So we can't initialize InputStream although it is not an interface
                        InputStream inputStream = httpResponse.getEntity().getContent();

                        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

                        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                        StringBuilder stringBuilder = new StringBuilder();

                        String bufferedStrChunk = null;

                        while((bufferedStrChunk = bufferedReader.readLine()) != null){
                            stringBuilder.append(bufferedStrChunk);
                        }

                        return stringBuilder.toString();

                    } catch (ClientProtocolException cpe) {
                        System.out.println("First Exception caz of HttpResponese :" + cpe);
                        cpe.printStackTrace();
                    } catch (IOException ioe) {
                        System.out.println("Second Exception caz of HttpResponse :" + ioe);
                        ioe.printStackTrace();
                    }

                } catch (UnsupportedEncodingException uee) {
                    System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee);
                    uee.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);

                if(result.equals("working")){
                    Toast.makeText(getApplicationContext(), "HTTP POST is working...", Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(getApplicationContext(), "Invalid POST req...", Toast.LENGTH_LONG).show();
                }
            }           
        }

        SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
        sendPostReqAsyncTask.execute(givenUsername, givenPassword);     
    }
}

24

বহিরাগত অ্যাপাচি লাইব্রেরি ব্যবহার করে মাল্টি-পার্ট ডেটা কীভাবে পোস্ট করা যায় তার একটি উদাহরণ:

byte[] buffer = getBuffer();

if(buffer.length > 0) {
   String lineEnd = "\r\n"; 
   String twoHyphens = "--"; 
   String boundary =  "RQdzAAihJq7Xp1kjraqf"; 

   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   DataOutputStream dos = new DataOutputStream(baos);

   // Send parameter #1
   dos.writeBytes(twoHyphens + boundary + lineEnd); 
   dos.writeBytes("Content-Disposition: form-data; name=\"param1\"" + lineEnd);
   dos.writeBytes("Content-Type: text/plain; charset=US-ASCII" + lineEnd);
   dos.writeBytes("Content-Transfer-Encoding: 8bit" + lineEnd);
   dos.writeBytes(lineEnd);
   dos.writeBytes(myStringData + lineEnd);

   // Send parameter #2
   //dos.writeBytes(twoHyphens + boundary + lineEnd); 
   //dos.writeBytes("Content-Disposition: form-data; name=\"param2\"" + lineEnd + lineEnd);
   //dos.writeBytes("foo2" + lineEnd);

   // Send a binary file
   dos.writeBytes(twoHyphens + boundary + lineEnd); 
   dos.writeBytes("Content-Disposition: form-data; name=\"param3\";filename=\"test_file.dat\"" + lineEnd); 
   dos.writeBytes("Content-Type: application/octet-stream" + lineEnd);
   dos.writeBytes("Content-Transfer-Encoding: binary" + lineEnd);
   dos.writeBytes(lineEnd); 
   dos.write(buffer);
   dos.writeBytes(lineEnd); 
   dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 
   dos.flush(); 
   dos.close();

   ByteArrayInputStream content = new ByteArrayInputStream(baos.toByteArray());
   BasicHttpEntity entity = new BasicHttpEntity();
   entity.setContent(content);

   HttpPost httpPost = new HttpPost(myURL);
   httpPost.addHeader("Connection", "Keep-Alive");
   httpPost.addHeader("Content-Type", "multipart/form-data; boundary="+boundary);

   //MultipartEntity entity = new MultipartEntity();
   //entity.addPart("param3", new ByteArrayBody(buffer, "test_file.dat"));
   //entity.addPart("param1", new StringBody(myStringData));

   httpPost.setEntity(entity);

   /*
   String httpData = "";
   ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
   entity.writeTo(baos1);
   httpData = baos1.toString("UTF-8");
   */

   /*
   Header[] hdrs = httpPost.getAllHeaders();
   for(Header hdr: hdrs) {
     httpData += hdr.getName() + " | " + hdr.getValue() + " |_| ";
   }
   */

   //Log.e(TAG, "httpPost data: " + httpData);
   response = httpClient.execute(httpPost);
}

3
অ্যাপাচি লাইব্রেরি ব্যবহার করে কিছু ভুল আছে? আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির আরম্ভ এবং কারণটির ব্যাকগ্রাউন্ড জানি না - সম্ভবত নির্বোধ প্রশ্নের জন্য দুঃখিত :-)
লুবসডজ

18
ছাড়া, হা হা। httpClient এবং httpPost অ্যাপাচি।
কাগালি-সান

1
কিভাবে JSONObject এবং ডক ফাইল উভয় প্রেরণ?
প্রতীক বুটানী

@ লুবসডজ কারণ অ্যান্ড্রয়েড এসডির অধীনে কোনও মাল্টি পার্টসেন্টিটি নেই, আপনাকে তার জন্য বাহ্যিক
জারগুলি

12

@ প্রিম্পপ জবাবটিতে আমি যুক্ত করব কীভাবে প্রতিক্রিয়াটিকে স্ট্রিংয়ে রূপান্তর করতে হবে:

HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null) {
    InputStream instream = entity.getContent();

    String result = RestClient.convertStreamToString(instream);
    Log.i("Read from server", result);
}

রূপান্তর ট্রামস্ট্রিংয়ের উদাহরণ এখানে


13
" HttpClient", " HttpPost", " HttpResponse", " HttpEntity", " EntityUtils", " NameValuePair", " BasicNameValuePair" হ্রাস করা হয়েছে। দয়া করে অন্য একটি সমাধান প্রস্তাব করুন।
রোহিত সুথার

7

আরও ভাল অ্যাপাচি কমন্স এইচটিপিপিলেয়েন্ট ব্যবহার করুন, এটি ইতিমধ্যে অ্যান্ড্রয়েডের অন্তর্ভুক্ত। অ্যান্ড্রয়েড বিকাশকারী একবার দেখুন : সাধারণ এপিআই তথ্যের জন্য অ্যাপাচি এইচটিটিপি ক্লায়েন্টের প্যাকেজ সংক্ষিপ্তসার


7

আপনি এটি কোনও ইউআরএলতে এইচটিটিপি পোস্ট অনুরোধ প্রেরণ করতে ব্যবহার করতে পারেন। আপনি সহজেই অনুরোধ পাঠাতে এবং প্রতিক্রিয়া পেতে পারেন। আমি সবসময় এটি ব্যবহার করি। আমি আমার ভাল কাজ।

  ///////////////////// Check SubScription ////////////////////

        try {
                                 AsyncHttpClient client = new AsyncHttpClient();
                                   // Http Request Params Object
                                   RequestParams params = new RequestParams();
                                   String u = "B2mGaME";
                                   String au = "gamewrapperB2M";
                                   // String mob = "880xxxxxxxxxx";
                                   params.put("usr", u.toString());
                                   params.put("aut", au.toString());
                                   params.put("uph", MobileNo.toString());
                                   //  params.put("uph", mob.toString());
                                                client.post("http://196.6.13.01:88/ws/game_wrapper_reg_check.php", params, new AsyncHttpResponseHandler() {
                                       @Override
                                       public void onSuccess(String response) {
                                           playStatus = response;
                                        //////Get your Response/////
                                           Log.i(getClass().getSimpleName(), "Response SP Status. " + playStatus);
                                       }
                   @Override
                   public void onFailure(Throwable throwable) {
                       super.onFailure(throwable);
                   }
                                   });
                               } catch (Exception e) {
                                   e.printStackTrace();
                               }

আপনার লিওব ফোল্ডে বেলো জার ফাইল যুক্ত করতে হবে

android-async-http-1.3.1.jar

অবশেষে আপনার বিল্ড.gradle সম্পাদনা করুন

dependencies {
    compile files('libs/<android-async-http-1.3.1.jar>')

}

সর্বশেষে আপনার প্রকল্পটি পুনর্নির্মাণ করুন।


7

okHttpস্কোয়ার থেকে ওপেন সোর্স লাইব্রেরি ব্যবহার করুন । okHttpঅ্যানড্রয়েড ২.৩ এবং তার থেকে উপরে কাজ করে এবং গিটহাবে একটি অ্যাপাচি ২.০ লাইসেন্স রয়েছে

POST ডেটা পাঠানো AsyncTask এ নিম্নলিখিতগুলি যুক্ত করার মতোই সহজ:

OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
                      .add("email", emailString) // A sample POST field
                      .add("comment", commentString) // Another sample POST field
                      .build();
Request request = new Request.Builder()
                 .url("https://yourdomain.org/callback.php") // The URL to send the data to
                 .post(formBody)
                 .build();

okHttpম্যাভেনের নেমস্পেসও রয়েছে তাই এটি আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পে যুক্ত করা সহজ। compile 'com.squareup.okhttp3:okhttp:3.11.0'আপনার অ্যাপ্লিকেশনটির বিল্ড.gradle এ কেবল যুক্ত করুন ।

সম্পূর্ণ কোড

আপনার ক্রিয়াকলাপে নিম্নলিখিতগুলি যুক্ত করুন:

public class CallAPI extends AsyncTask<String, String, String> {

    String emailString;
    String commentString;

    public CallAPI(String email, String commnt){
           emailString = email;
           commentString = commnt;
    }

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

    @Override
    protected String doInBackground(String... params) {
        OkHttpClient client = new OkHttpClient();
        RequestBody formBody = new FormBody.Builder()
                      .add("email", emailString) // A sample POST field
                      .add("comment", commentString) // Another sample POST field
                      .build();
        Request request = new Request.Builder()
                 .url("https://yourdomain.org/callback.php") // The URL to send the data to
                 .post(formBody)
                 .build();
        return "";
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
    }
}

এবং এটি ব্যবহার করে কল করুন:

new CallAPI(emailString, commentString).execute();

6

আমার জন্য পরবর্তী কাজ করে:

 private sendData() {
     JSONObject jsonObject = new JSONObject();
     jsonObject.accumulate("key1", value1);
     jsonObject.accumulate("key2", value2);

     boolean success = sendPost(SERVER_URL + "/v1/auth", jsonObject);
 }

 private boolean sendPost(String url, JSONObject parameters) {
        boolean requestResult = false;
        InputStream inputStream = null;
        String result = "";
        try {

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            String json = "";

            json = parameters.toString();

            StringEntity se = new StringEntity(json);
            httpPost.setEntity(se);

            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");

            HttpResponse httpResponse = httpclient.execute(httpPost);

            inputStream = httpResponse.getEntity().getContent();

            if (inputStream != null) {
                result = convertInputStreamToString(inputStream);
                requestResult = true;
            } else {
                result = "Did not work!";
                requestResult = false;
            }
            System.out.println(result);
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
            requestResult = false;
        }
        return requestResult;
    }

6

আপনি ব্যবহার করতে পারেন URLConnectionসঙ্গে , (ডাটা পাঠানোর জন্য), এবং (প্রাপ্তির জন্য)। সূর্যের ঠিক এর জন্য উদাহরণ রয়েছে ।setDoOutput(true)getOutputStream() getInputStream()


1
কেবলমাত্র এফওয়াইআই, ইউআরএল সংযোগটি HTTPClient 4.x লাইব্রেরির তুলনায় খারাপভাবে সম্পাদন করে।
জেসনহডগিনস

4
আমি প্লেইন ইউআরএল সংযোগটি পছন্দ করি কারণ এটি অ্যাপাচি কমন্স এইচটিপিপি্লিয়েন্টের চেয়ে দ্রুত বলে মনে হয়।
digz6666

4

আপনি যদি কেবল url এ ডেটা যুক্ত করতে চান তবে আপনি এইচটিটিপিআরল সংযোগ ব্যবহার করে এটি করতে পারেন যেহেতু এইচটিটিপিসিলেট এখন অবচিত হয়ে গেছে। এর চেয়ে ভাল উপায় হ'ল লাইব্রেরি ব্যবহার করা যেমন-

ভলি রেট্রোফিট

আমরা পিএইচপি স্ক্রিপ্টে ডেটা পোস্ট করতে পারি এবং ফলাফল আনতে এবং অ্যাসিঙ্কটাস্ক ক্লাসের মাধ্যমে সম্পাদিত এই কোডটি ব্যবহার করে এটি প্রদর্শন করতে পারি।

    private class LongOperation  extends AsyncTask<String, Void, Void> {

    // Required initialization


    private String Content;
    private String Error = null;
    private ProgressDialog Dialog = new ProgressDialog(Login.this);
    String data ="";
    int sizeData = 0;



    protected void onPreExecute() {
        // NOTE: You can call UI Element here.

        //Start Progress Dialog (Message)

        Dialog.setMessage("Please wait..");
        Dialog.show();
        Dialog.setCancelable(false);
        Dialog.setCanceledOnTouchOutside(false);

        try{
            // Set Request parameter
            data +="&" + URLEncoder.encode("username", "UTF-8") + "="+edittext.getText();



        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    // Call after onPreExecute method
    protected Void doInBackground(String... urls) {

        /************ Make Post Call To Web Server ***********/
        BufferedReader reader=null;

        // Send data
        try
        {

            // Defined URL  where to send data
            URL url = new URL(urls[0]);

            // Send POST data request

            URLConnection conn = url.openConnection();

            conn.setConnectTimeout(5000);//define connection timeout 
            conn.setReadTimeout(5000);//define read timeout
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write( data );
            wr.flush();

            // Get the server response

            reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;



            // Read Server Response
            while((line = reader.readLine()) != null)
            {
                // Append server response in string
                sb.append(line + " ");
            }

            // Append Server Response To Content String
            Content = sb.toString();


        }
        catch(Exception ex)
        {
            Error = ex.getMessage();
        }
        finally
        {
            try
            {

                reader.close();
            }

            catch(Exception ex) {}
        }


        return null;
    }

    protected void onPostExecute(Void unused) {
        // NOTE: You can call UI Element here.

        // Close progress dialog
        Dialog.dismiss();

        if (Error != null) {

                Toast.makeText(getApplicationContext(),"Error encountered",Toast.LENGTH_LONG).show();



        }
        else {




            try {

                JSONObject jsonRootObject = new JSONObject(Content);


                JSONObject json2 =jsonRootObject.getJSONObject("jsonkey");//pass jsonkey here


                String id =json2.optString("id").toString();//parse json to string through parameters


     //the result is stored in string id. you can display it now


            } catch (JSONException e) {e.printStackTrace();}


        }

    }

}

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


4

আমি এই ভিডিও টিউটোরিয়ালের সাহায্যে এই সহায়ক উদাহরণটি পেয়েছি ।

সংযোগকারী শ্রেণি:

package com.tutorials.hp.mysqlinsert;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
 * Created by Oclemmy on 3/31/2016 for ProgrammingWizards Channel.
 */
public class Connector {
    /*
 1.SHALL HELP US ESTABLISH A CONNECTION TO THE NETWORK
 2. WE ARE MAKING A POST REQUEST
  */
    public static HttpURLConnection connect(String urlAddress) {
        try
        {
            URL url=new URL(urlAddress);
            HttpURLConnection con= (HttpURLConnection) url.openConnection();
            //SET PROPERTIES
            con.setRequestMethod("POST");
            con.setConnectTimeout(20000);
            con.setReadTimeout(20000);
            con.setDoInput(true);
            con.setDoOutput(true);
            //RETURN
            return con;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
 }

ডেটাপ্যাকগার শ্রেণি:

package com.tutorials.hp.mysqlinsert;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Iterator;
/**
 * Created by Oclemmy on 3/31/2016 for ProgrammingWizards Channel.
 * 1.BASICALLY PACKS DATA WE WANNA SEND
 */
public class DataPackager {
    String name,position,team;
    /*
    SECTION 1.RECEIVE ALL DATA WE WANNA SEND
     */
    public DataPackager(String name, String position, String team) {
        this.name = name;
        this.position = position;
        this.team = team;
    }
    /*
   SECTION 2
   1.PACK THEM INTO A JSON OBJECT
   2. READ ALL THIS DATA AND ENCODE IT INTO A FROMAT THAT CAN BE SENT VIA NETWORK
    */
    public String packData()
    {
        JSONObject jo=new JSONObject();
        StringBuffer packedData=new StringBuffer();
        try
        {
            jo.put("Name",name);
            jo.put("Position",position);
            jo.put("Team",team);
            Boolean firstValue=true;
            Iterator it=jo.keys();
            do {
                String key=it.next().toString();
                String value=jo.get(key).toString();
                if(firstValue)
                {
                    firstValue=false;
                }else
                {
                    packedData.append("&");
                }
                packedData.append(URLEncoder.encode(key,"UTF-8"));
                packedData.append("=");
                packedData.append(URLEncoder.encode(value,"UTF-8"));
            }while (it.hasNext());
            return packedData.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
        }
}

প্রেরক শ্রেণি:

package com.tutorials.hp.mysqlinsert;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
/**
 * Created by Oclemmy on 3/31/2016 for ProgrammingWizards Channel and Camposha.com.
 * 1.SEND DATA FROM EDITTEXT OVER THE NETWORK
 * 2.DO IT IN BACKGROUND THREAD
 * 3.READ RESPONSE FROM A SERVER
 */
public class Sender extends AsyncTask<Void,Void,String> {
    Context c;
    String urlAddress;
    EditText nameTxt,posTxt,teamTxt;
    String name,pos,team;
    ProgressDialog pd;
    /*
            1.OUR CONSTRUCTOR
    2.RECEIVE CONTEXT,URL ADDRESS AND EDITTEXTS FROM OUR MAINACTIVITY
    */
    public Sender(Context c, String urlAddress,EditText...editTexts) {
        this.c = c;
        this.urlAddress = urlAddress;
        //INPUT EDITTEXTS
        this.nameTxt=editTexts[0];
        this.posTxt=editTexts[1];
        this.teamTxt=editTexts[2];
        //GET TEXTS FROM EDITEXTS
        name=nameTxt.getText().toString();
        pos=posTxt.getText().toString();
        team=teamTxt.getText().toString();
    }
    /*
   1.SHOW PROGRESS DIALOG WHILE DOWNLOADING DATA
    */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd=new ProgressDialog(c);
        pd.setTitle("Send");
        pd.setMessage("Sending..Please wait");
        pd.show();
    }
    /*
    1.WHERE WE SEND DATA TO NETWORK
    2.RETURNS FOR US A STRING
     */
    @Override
    protected String doInBackground(Void... params) {
        return this.send();
    }
    /*
  1. CALLED WHEN JOB IS OVER
  2. WE DISMISS OUR PD
  3.RECEIVE A STRING FROM DOINBACKGROUND
   */
    @Override
    protected void onPostExecute(String response) {
        super.onPostExecute(response);
        pd.dismiss();
        if(response != null)
        {
            //SUCCESS
            Toast.makeText(c,response,Toast.LENGTH_LONG).show();
            nameTxt.setText("");
            posTxt.setText("");
            teamTxt.setText("");
        }else
        {
            //NO SUCCESS
            Toast.makeText(c,"Unsuccessful "+response,Toast.LENGTH_LONG).show();
        }
    }
/*
SEND DATA OVER THE NETWORK
RECEIVE AND RETURN A RESPONSE
 */
    private String send()
    {
        //CONNECT
        HttpURLConnection con=Connector.connect(urlAddress);
        if(con==null)
        {
            return null;
        }
        try
        {
            OutputStream os=con.getOutputStream();
            //WRITE
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
            bw.write(new DataPackager(name,pos,team).packData());
            bw.flush();
            //RELEASE RES
            bw.close();
            os.close();
            //HAS IT BEEN SUCCESSFUL?
            int responseCode=con.getResponseCode();
            if(responseCode==con.HTTP_OK)
            {
                //GET EXACT RESPONSE
                BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream()));
                StringBuffer response=new StringBuffer();
                String line;
                //READ LINE BY LINE
                while ((line=br.readLine()) != null)
                {
                    response.append(line);
                }
                //RELEASE RES
                br.close();
                return response.toString();
            }else
            {
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

যথোপযুক্ত সৃষ্টিকর্তা:

package com.tutorials.hp.mysqlinsert;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/*
1.OUR LAUNCHER ACTIVITY
2.INITIALIZE SOME UI STUFF
3.WE START SENDER ON BUTTON CLICK
 */
public class MainActivity extends AppCompatActivity {
    String urlAddress="http://10.0.2.2/android/poster.php";
    EditText nameTxt,posTxt,teamTxt;
    Button saveBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        //INITIALIZE UI FIELDS
        nameTxt= (EditText) findViewById(R.id.nameEditTxt);
        posTxt= (EditText) findViewById(R.id.posEditTxt);
        teamTxt= (EditText) findViewById(R.id.teamEditTxt);
        saveBtn= (Button) findViewById(R.id.saveBtn);
        saveBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //START ASYNC TASK
                Sender s=new Sender(MainActivity.this,urlAddress,nameTxt,posTxt,teamTxt);
                s.execute();
            }
        });
    }
}

ContentMain.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.tutorials.hp.mysqlinsert.MainActivity"
    tools:showIn="@layout/activity_main">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?attr/actionBarSize"
        android:orientation="vertical"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="50dp">
        <android.support.design.widget.TextInputLayout
            android:id="@+id/nameLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <EditText
                android:id="@+id/nameEditTxt"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:hint= "Name" />
        </android.support.design.widget.TextInputLayout>
        <android.support.design.widget.TextInputLayout
            android:id="@+id/teamLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <EditText
                android:id="@+id/teamEditTxt"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Description" />
        </android.support.design.widget.TextInputLayout>
        <android.support.design.widget.TextInputLayout
            android:id="@+id/posLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <EditText
                android:id="@+id/posEditTxt"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Position" />
            <!--android:inputType="textPassword"-->
        </android.support.design.widget.TextInputLayout>
        <Button android:id="@+id/saveBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Save"
            android:clickable="true"
            android:background="@color/colorAccent"
            android:layout_marginTop="40dp"
            android:textColor="@android:color/white"/>
    </LinearLayout>
</RelativeLayout>

3

এইচটিটিপি অনুরোধ হিসাবে ডেটা পোস্ট করার পদ্ধতি,

public static InputStream callPostService(String Url,
        List<NameValuePair> data) {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(Url);
    try {
        httppost.setEntity(new UrlEncodedFormEntity(data));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        return entity.getContent();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

10
" HttpClient", " HttpPost", " HttpResponse", " HttpEntity", " EntityUtils", " NameValuePair", " BasicNameValuePair" হ্রাস করা হয়েছে। দয়া করে অন্য একটি সমাধান প্রস্তাব করুন।
রোহিত সুথার

1
@ রোহিত সুথার, পুরানো নয়, নতুন অ্যান্ড্রয়েড সংস্করণগুলির জন্য অবচিত। সুতরাং স্প্যামিং বন্ধ করুন
ইউশা আলেয়াউব 22'16

3

আপনি ওয়েব সার্ভার ক্লাস ব্যবহার করে একটি এইচটিপিআরকিউস্ট পোস্ট করতে পারেন এবং এর শ্রোতা ইন্টারফেসে প্রতিক্রিয়াটি ট্র্যাক করতে পারেন।

WebServer server=new WebServer(getApplicationContext());

server.setOnServerStatusListner(new WebServer.OnServerStatusListner() {
    @Override
    public void onServerResponded(String responce) {

    }

    @Override
    public void onServerRevoked() {

    }
});

এখন আপনার ডেটা বাঁধতে একটি ডাটার্যাক তৈরি করুন

List<DataRack> racks=new ArrayList<DataRack>();
racks.add(new DataRack("name","Simon"));
racks.add(new DataRack("age","40"));
racks.add(new DataRack("location","Canada"));

এখন কেবল সেই র্যাকের সাথে পোস্টের অনুরোধটি প্রেরণ করুন

server.connectWithPOST(MainActivity.this,"http://sangeethnandakumar.esy.es/PROJECTS/PUBLIC_SERVICE/posttest.php",racks);

এর জন্য আপনাকে আমার লাইব্রেরি অন্তর্ভুক্ত করতে হবে। ডকুমেন্টেশন এখানে


1

অ্যান্ড্রয়েডের নতুন সংস্করণগুলিতে আপনাকে সমস্ত ওয়েব আই / ও অনুরোধগুলি একটি নতুন থ্রেডে রাখতে হবে। অ্যাসিঙ্কটাস্ক ছোট অনুরোধগুলির জন্য সবচেয়ে ভাল কাজ করে।


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