java Android studio POST 请求示例

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/35886591/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 00:43:12  来源:igfitidea点击:

Example of POST request in Android studio

javaandroidrestpostget

提问by Ryan Walker

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:

几天前我刚开始学习 android,我在将 JSON 数据上传到服务器时遇到了问题。我设法通过以下代码检索它:

Edit: I did manage to retrieve files using external OKHTTP library but I would like to do this without using external libraries.

编辑:我确实设法使用外部 OKHTTP 库检索文件,但我想在不使用外部库的情况下执行此操作。

package cc.demorest;

import android.os.AsyncTask;
import android.renderscript.ScriptGroup;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DownloadTask task = new DownloadTask();
        task.execute("myserver.com");
    }
//Downloadtask
    public class DownloadTask extends AsyncTask<String,Void,String> {


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

            String result = "";
                URL url;
            HttpURLConnection urlConnection=null;


            try {
                url = new URL(urls[0]);

                urlConnection=(HttpURLConnection)url.openConnection();
                InputStream in = urlConnection.getInputStream();

                InputStreamReader reader = new InputStreamReader(in);

                int data=reader.read();

                while (data !=-1){

                    char current=(char) data;

                    result += current;
                    data = reader.read();
                }

                return result;

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }
//After download task
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
        try {

            JSONArray jArray=new JSONArray(result);
                JSONObject json_data = jArray.getJSONObject(1);
//Logging data
               Log.i("Podatci: ", "Id: " + json_data.getInt("Id") +
                                ", Name: " + json_data.getString("Name") +
                                ", Years: " + json_data.getString("Age") +
                                ", Email address: " + json_data.getString("Email")
                );
                TextView textView = (TextView) findViewById(R.id.textViewName);
                textView.setText("ID: "+", Name: "+  json_data.getInt("Id")+json_data.getString("Name")+json_data.getString("Age")+json_data.getString("Email"));




/*
        String data = jsonObject.getString("Name");
            Log.i("Website content", data);
*/
        } catch (JSONException e) {
            e.printStackTrace();
        }

        }
    }



}

I am now trying to send my data to same server with same fields. I searched internet but most things that I found are outdated.. I would really appriciate some help or example. Best Regards

我现在试图将我的数据发送到具有相同字段的同一台服务器。我搜索了互联网,但我发现的大多数东西都已经过时了..我真的很想提供一些帮助或示例。最好的祝福

采纳答案by Ruchira Randana

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

使用此处定义的 Volley 。这要容易得多。

回答by Ryan Walker

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

使用HttpURLConnection,它不使用外部库。如果您要使用 HttpURLConnection,则它必须是AsyncTask.

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

这是我完成的项目中的代码。希望能帮助到你。

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

首先,把它放在你的 manifest.xml 文件之前:

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

Calling the AsyncTask:

调用异步任务:

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

(忽略 this、SinceTime 和 GoesAddress。它们只是我传入的变量)

    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);
    }
}