HttpURLConnection post 不工作
HttpURLConnection post doesn't work
我正在尝试 post 我的 API 对象,但它不起作用。
我的 API 方法如下所示
[Route("Route is working but wanna keep this address hidden")]
[System.Web.Http.Acceptverbs("POST")]
[HttpPost]
public void Post(Comment comment)
{
db.Comments.Add(comment);
db.SaveChanges();
}
所以我有我的 API 和这个方法,然后当我在我的 android 应用程序中按下一个按钮时,我希望它 post 到这个方法但是没有任何提示 posted.
我的 android 应用程序中的代码
public class ConnectionPost extends AsyncTask<String,String,String> {
@Override
protected String doInBackground(String... params) {
URL url = null;
try {
url = new URL("Keeping this address hidden");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
JSONObject comment = new JSONObject();
comment.put("Name","Joe");
OutputStreamWriter ap_osw= new OutputStreamWriter(conn.getOutputStream());
ap_osw.write(comment.toString());
ap_osw.flush();
ap_osw.close();
Log.d("test", "" + comment.toString());
}
catch (Exception e){
}
return "";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
}
当我单击我的按钮时,我调用了一个包含此代码的方法。
ConnectionPost send = new ConnectionPost();
send.execute();
在 LogCat 中,我可以看到我创建的对象,但没有任何内容 posted,所以想知道我做错了什么?
抱歉,有些东西命名不当,稍后会修复。
你的代码对我来说工作正常,导致可怕的,"works on my machine."
1) 清单中有 <uses-permission android:name="android.permission.INTERNET" />
吗?
2) 处理异常,方便调试。
3) Read/log 服务器的响应,可以帮你调试。
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder result = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
in.close();
Log.d("test", result.toString());
很多时候连接失败的是配置而不是代码。你的代码没问题。
我修复了它:) 这是因为在我的对象中我有一个 DateTime 字段,我试图在发布时将它设置为 null,但是当然它不起作用。将其更改为 DateTime.Now.
我正在尝试 post 我的 API 对象,但它不起作用。
我的 API 方法如下所示
[Route("Route is working but wanna keep this address hidden")]
[System.Web.Http.Acceptverbs("POST")]
[HttpPost]
public void Post(Comment comment)
{
db.Comments.Add(comment);
db.SaveChanges();
}
所以我有我的 API 和这个方法,然后当我在我的 android 应用程序中按下一个按钮时,我希望它 post 到这个方法但是没有任何提示 posted.
我的 android 应用程序中的代码
public class ConnectionPost extends AsyncTask<String,String,String> {
@Override
protected String doInBackground(String... params) {
URL url = null;
try {
url = new URL("Keeping this address hidden");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
JSONObject comment = new JSONObject();
comment.put("Name","Joe");
OutputStreamWriter ap_osw= new OutputStreamWriter(conn.getOutputStream());
ap_osw.write(comment.toString());
ap_osw.flush();
ap_osw.close();
Log.d("test", "" + comment.toString());
}
catch (Exception e){
}
return "";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
}
当我单击我的按钮时,我调用了一个包含此代码的方法。
ConnectionPost send = new ConnectionPost();
send.execute();
在 LogCat 中,我可以看到我创建的对象,但没有任何内容 posted,所以想知道我做错了什么?
抱歉,有些东西命名不当,稍后会修复。
你的代码对我来说工作正常,导致可怕的,"works on my machine."
1) 清单中有 <uses-permission android:name="android.permission.INTERNET" />
吗?
2) 处理异常,方便调试。
3) Read/log 服务器的响应,可以帮你调试。
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder result = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
result.append(line);
}
reader.close();
in.close();
Log.d("test", result.toString());
很多时候连接失败的是配置而不是代码。你的代码没问题。
我修复了它:) 这是因为在我的对象中我有一个 DateTime 字段,我试图在发布时将它设置为 null,但是当然它不起作用。将其更改为 DateTime.Now.