Example of POST request in Android studio

前端 未结 2 1891
执念已碎
执念已碎 2021-01-23 09:03

I just started learning android few days ago and I have a problem with uploading my JSON data to server. I manage to retrieve it via following code:

Edit: I did manage t

相关标签:
2条回答
  • 2021-01-23 09:37

    Use Volley as defined here. It's far more easier.

    0 讨论(0)
  • 2021-01-23 09:45

    Use HttpURLConnection, it does not use external libraries. If you're going to use an HttpURLConnection, it needs to be an AsyncTask.

    Here is my code from a project I completed. Hope it helps.

    First, put this in your manifest.xml file before :

    <uses-permission android:name="android.permission.INTERNET" />
    

    Calling the AsyncTask:

    (Ignore the this, SinceTime, and GoesAddress. They are just variables I passed in)

        URL url = new URL("https://eddn.usgs.gov/cgi-bin/fieldtest.pl");
        new ReceiveData(this, SinceTime, GoesAddress).execute(url);
    

    The Class:

    package com.ryan.scrapermain;
    
    import android.content.Context;
    import android.os.AsyncTask;
    
    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.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.net.ssl.HttpsURLConnection;
    
    
    public class ReceiveData extends AsyncTask<URL, Integer, Long> {
    
        String response = "";
        String SinceTime;
        String GoesAddress;
        Context myContext;
    
        ReceiveData(Context context, String since, String goes) {
            this.myContext = context;
            SinceTime = since;
            GoesAddress = goes;
            }
    
        private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
            StringBuilder feedback = new StringBuilder();
            boolean first = true;
            for(Map.Entry<String, String> entry : params.entrySet()){
                if (first)
                    first = false;
                else
                    feedback.append("&");
    
                feedback.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
                feedback.append("=");
                feedback.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
            }
    
            return feedback.toString();
        }
    
        public void getData() throws IOException {
    
            HashMap<String, String> params = new HashMap<>();
            params.put("DCPID", GoesAddress);
            params.put("SINCE", SinceTime);
    
            URL url = new URL("https://eddn.usgs.gov/cgi-bin/fieldtest.pl");
            HttpURLConnection client = null;
            try {
                client = (HttpURLConnection) url.openConnection();
                client.setRequestMethod("POST");
                // You need to specify the context-type.  In this case it is a
                // form submission, so use "multipart/form-data"
                client.setRequestProperty("multipart/form-data", "https://eddn.usgs.gov/fieldtest.html;charset=UTF-8");
                client.setDoInput(true);
                client.setDoOutput(true);
    
                OutputStream os = client.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                writer.write(getPostDataString(params));
    
                writer.flush();
                writer.close();
                os.close();
                int responseCode = client.getResponseCode();
    
                if (responseCode == HttpsURLConnection.HTTP_OK) {
                    String line;
                    BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    while ((line = br.readLine()) != null) {
                        response += line;
                    }
                }
                else {
                    response = "";
                }
            }
            catch (MalformedURLException e){
                e.printStackTrace();
            }
            finally {
                if(client != null) // Make sure the connection is not null.
                    client.disconnect();
            }
        }
    
        @Override
        protected Long doInBackground(URL... params) {
            try {
                getData();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            // This counts how many bytes were downloaded
            final byte[] result = response.getBytes();
            Long numOfBytes = Long.valueOf(result.length);
            return numOfBytes;
        }
    
        protected void onPostExecute(Long result) {
            System.out.println("Downloaded " + result + " bytes");
            // This is just printing it to the console for now.
            System.out.println(response);
            // In the following two line I pass the string elsewhere and decode it.
            InputCode input = new InputCode();
            input.passToDisplay(myContext, response);
        }
    }
    
    0 讨论(0)
提交回复
热议问题