【发布时间】:2016-02-18 05:12:28
【问题描述】:
我正在寻找有关如何在我的 Android 应用程序中将数据发布到 Web 服务的一些指导。不幸的是,这是一个学校项目,所以我无法使用外部库。
Web 服务有一个基本 URL,例如:
http://example.com/service/create
并取两个变量,格式如下:
username = "user1"
locationname = "location1"
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;
}
}
}
【问题讨论】:
-
Retrofit 有很多例子
-
您是否尝试过使用 Retrofit 而不是滚动自己的 HttpUrlConnection?
-
很遗憾这是一个学校项目,所以我无法使用外部库
-
如何添加一个json作为Body?