Android HTTP POST响应没有响应

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客户

我不知道为什么我的代码没有得到post请求的响应。这是服务器的文档:

用于EMT-REST JSON访问的Web服务。 所有服务请求都被称为POST,所以所有参数都应该添加到主体请求中。 响应是JSON格式的文本。 所有方法请求都需要一个idClient和passKey,这些值由EMT根据请求提供。

URL基是

到达终点站

${ServerURL}/geo/GetArriveStop.php

获取到达目标站点的公交车到达信息

请求

idClient API客户端标识符字符串

密钥API客户端密码字符串

idStop停止id字符串 统计信息私人使用不设置字符串

响应字符串的cultureInfo EN|ES语言

回应

到达列表到达列表到达列表

最后,这是我执行它的Android代码:

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。是的,它现在可以工作了,连接没有任何问题。我想这不是避免这个异常的最好方法,但我现在不太知道如何纠正它。文档中没有提到证书,因此我认为这是一个客户端问题。