Android HTTP POST响应没有响应
我不知道为什么我的代码没有得到post请求的响应。这是服务器的文档: 用于EMT-REST JSON访问的Web服务。 所有服务请求都被称为POST,所以所有参数都应该添加到主体请求中。 响应是JSON格式的文本。 所有方法请求都需要一个idClient和passKey,这些值由EMT根据请求提供。 URL基是 到达终点站 ${ServerURL}/geo/GetArriveStop.php 获取到达目标站点的公交车到达信息 请求 idClient API客户端标识符字符串 密钥API客户端密码字符串 idStop停止id字符串 统计信息私人使用不设置字符串 响应字符串的cultureInfo EN|ES语言 回应 到达列表到达列表到达列表 最后,这是我执行它的Android代码:Android HTTP POST响应没有响应,android,apache,http,post,connection,Android,Apache,Http,Post,Connection,我不知道为什么我的代码没有得到post请求的响应。这是服务器的文档: 用于EMT-REST JSON访问的Web服务。 所有服务请求都被称为POST,所以所有参数都应该添加到主体请求中。 响应是JSON格式的文本。 所有方法请求都需要一个idClient和passKey,这些值由EMT根据请求提供。 URL基是 到达终点站 ${ServerURL}/geo/GetArriveStop.php 获取到达目标站点的公交车到达信息 请求 idClient API客户端标识符字符串 密钥API客户
import java.io.InputStream;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import com.hmkcode.android.R;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity{
EditText etName;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
etName = (EditText) findViewById(R.id.etName);
new HttpAsyncTask().execute("https://openbus.emtmadrid.es:9443/emt-proxy-server/last/geo/GetArriveStop.php");
}
private class HttpAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
return POST(urls[0]);
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
Toast.makeText(getBaseContext(), "Data Sent and received!", Toast.LENGTH_LONG).show();
etName.setText(result); //editText from layout
}
}
public static String POST(String url){
Log.i("METHOD POST INICIATED", "METHOD POST");
InputStream inputStream = null;
String result = "";
try {
// 1. create HttpClient
HttpClient httpclient = new DefaultHttpClient();
// 2. make POST request to the given URL
HttpPost httpPost = new HttpPost(url);
String json = "";
// 3. build jsonObject
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("idClient","EMT.SERVICIOS.EMTJSONBETA");
jsonObject.accumulate("passKey", "4F4EEB75-A822-41E3-817B-AB301D5DA321");
jsonObject.accumulate("idStop", "488");
jsonObject.accumulate("cultureInfo", "ES");
// 4. convert JSONObject to JSON to String
json = jsonObject.toString();
// ** Alternatives way to convert Person object to JSON string usin Jackson Lib
// 5. set json to StringEntity
StringEntity se = new StringEntity(json);
// 6. set httpPost Entity
httpPost.setEntity(se);
// 7. Set some headers to inform server about the type of the content
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
Log.i("HTTP EXECUTION", "right before line httpclient.exeute");
// 8. Execute POST request to the given URL
HttpResponse httpResponse = httpclient.execute(httpPost);
Log.i("AFTER HTTP EXECUTION", "right before line hhtpclient.exeute");
// 9. receive response as inputStream
//inputStream = httpResponse.getEntity().getContent();
result = EntityUtils.toString(httpResponse.getEntity());
// 10. convert inputstream to string
//if(inputStream != null){
Log.i("CONVERT INPUT", "convertInputStreamToString");
//result = convertInputStreamToString(inputStream);
//}else{
Log.i("NO INPUT", "result = did not work!");
//result = "Did not work!";
//}
} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
}
// 11. return result
return result;
}
}
在这行代码之后,它不再继续
// 8. 执行对给定URL的POST请求
HttpResponse HttpResponse=httpclient.executehttpPost
我不知道为什么
我用另一台服务器作为例子进行了尝试,效果很好,也许我在标题中遗漏了一些东西。服务器的完整文档:您将以json数组的形式发送参数。你在文档中哪里读到的?尝试以普通名称-值对的形式发送参数。但是application/json是存在的。。。嗯,我不知道……它确实在继续,但在捕捉区。在onPostExecute中显示一个Toast,说明发送和接收的数据!但你没有检查这是否属实。添加语句'result+=Exception:+e.getLocalizedMessage;'在抓块里。你应该已经在你的日志中看到了这条消息。我这样做了,并在另一个网络中检查了它,我收到了以下异常:没有对等证书。经过一段时间的研究,我发现它解决了这个问题,在大多数情况下,这个例外在Android中似乎很常见。但是它为你解决了这个问题吗?我认为这不是一个好办法。如果您想使用https,那么您可以获得自己的证书并使用ssl。是的,它现在可以工作了,连接没有任何问题。我想这不是避免这个异常的最好方法,但我现在不太知道如何纠正它。文档中没有提到证书,因此我认为这是一个客户端问题。