Android - POST到RESTful Web服务

use*_*750 5 rest post android

我正在寻找有关如何在我的Android应用程序中将数据发布到Web服务的一些指导.不幸的是,这是一个学校项目,所以我无法使用外部库.

Web服务具有基本URL,例如:

http://example.com/service/create
Run Code Online (Sandbox Code Playgroud)

并采用以下格式的两个变量:

username = "user1"
locationname = "location1"
Run Code Online (Sandbox Code Playgroud)

Web服务是RESTful并使用XML结构,如果这有所不同.从我的研究中我了解到我应该使用URLconnection而不是弃用的HTTPconnection,但我找不到我要找的例子.

这是我的尝试,目前无效:

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toPost test = new toPost();
        text.execute();
    }

    private class toPost extends AsyncTask<URL, Void, String> {
        @Override
        protected String doInBackground(URL... params) {
            HttpURLConnection conn = null;
            try {
                URL url = new URL("http://example.com/service");
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                String body = "username=user1&locationname=location1";
                OutputStream output = new BufferedOutputStream(conn.getOutputStream());
                output.write(body.getBytes());
                output.flush();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                conn.disconnect();
            }
            return null;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

小智 0

是的,您应该使用 URLConnection 来发出请求。

您可以将 xml 数据作为有效负载发送。

请参阅Android - 使用 HttpURLConnection 来 POST XML 数据

    URL url = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    try {
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);
        String body = "<xml...</xml>";
        OutputStream output = new BufferedOutputStream(conn.getOutputStream());
        output.write(body.getBytes());
        output.flush();
    } finally {
        conn.disconnect();
    }
Run Code Online (Sandbox Code Playgroud)