Android HttpPost请求异常

Android HttpPost请求异常,android,json,request,http-post,Android,Json,Request,Http Post,作为代码的演示,我正在尝试在oncreate函数中获取一些JSON数据。我知道它应该在另一个线程上运行,但我希望确保代码在将其移动到自己的线程之前成功获取我的JSON 代码如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_acti

作为代码的演示,我正在尝试在oncreate函数中获取一些JSON数据。我知道它应该在另一个线程上运行,但我希望确保代码在将其移动到自己的线程之前成功获取我的JSON

代码如下:

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        /***************************************************/
        final String TAG = "PostFetcher";
        final String SERVER_URL = "http://kylewbanks.com/rest/posts";
//        final String TAG = "PostsActivity";
//        List<Post> posts;

        try {
            //Create an HTTP client
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(SERVER_URL);

            //Perform the request and check the status code
            HttpResponse response = client.execute(post);
            StatusLine statusLine = response.getStatusLine();

            if(statusLine.getStatusCode() == 200) {
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();

                try {
                    //Read the server response and attempt to parse it as JSON
                    Reader reader = new InputStreamReader(content);

                    GsonBuilder gsonBuilder = new GsonBuilder();
                    gsonBuilder.setDateFormat("M/d/yy hh:mm a");
                    Gson gson = gsonBuilder.create();
                    List<JsonObject> posts = new ArrayList<JsonObject>();

                    Log.e(TAG, "Checking: " + posts);

//                    posts = Arrays.asList(gson.fromJson(reader, JsonObject[].class));
                    content.close();

                } catch (Exception ex) {
                    Log.e(TAG, "Failed to parse JSON due to: " + ex);
                }
            } else {
                Log.e(TAG, "Server responded with status code: " + statusLine.getStatusCode());
            }
        } catch(Exception ex) {
            Log.e(TAG, "Failed to send HTTP POST request due to: " + ex);
        }
}

谁能告诉我我做错了什么吗?

它的内部服务器错误..检查服务器端是否抛出任何异常

这与您的android代码无关,问题在于服务器


您可以使用
AsyncTask
运行与网络/文件系统相关的操作。

您正在向(显然)使用RESTful样式API的网站发送
HttpPost
请求

这意味着,它与HTTP动词(GET、POST、PUT、DELETE)一起工作

如果要读取数据且读取访问从不更改数据,请使用GET

如果要更新或替换数据,请使用PUT或POST(PUT通常用于替换,POST用于更改/添加)。然而,JavaScript只支持GET和POST请求,所以请记住这一点

如果要删除资源或集合,请使用“删除”

也就是说:如果您想加载数据,请在您的案例中使用Get
HttpGet
而不是
HttpPost

还可以阅读更多关于

编辑: 事实上,在中调用给定的URL(如另一个答案的注释中所述)会导致HTML网站报告错误:

您通过POST调用了此URL,但URL不会以斜杠和斜杠结尾 你有一个附加的斜杠集。Django无法重定向到斜杠URL 同时维护POST数据。将表单更改为指向 kylewbanks.com/rest/posts/(注意后面的斜杠)或set 在Django设置中追加\u SLASH=False


错误代码500是内部服务器错误。。。服务器崩溃了..出于好奇。为什么要使用
HttpPost
?这是过去10天里我第4次或第5次看到人们使用
HttpPost
通过一种或另一种RESTful从服务器读取JSONAPI@Tseng:我对Android和Java编码以及从教程中获得的代码不熟悉。我只是稍微修改了一下你的问题还存在吗?如果没有一个答案解决了你的问题,你可能想提供更多的信息,但不是这样。在浏览器中复制和粘贴URL时,URL工作正常。但如果您使用Fiddler2伪造POST请求,则会得到500个错误。因为在RESTfulAPI中,不能通过POST请求读取数据,只能编写数据。由于他没有发送任何参数来更新数据,因此导致了一个错误谢谢。我只是想知道你能否告诉我为什么要用斜杠?斜杠有什么意义?这是Django的一些命名或url约定。引用的文本是当
http://kylewbanks.com/rest/posts
是通过Http Post请求调用的(您不能从浏览器中执行此操作,您需要像Fiddler这样的工具来发送Post请求),这就是我之前回答的原因。RESTful API中的GET请求用于读取数据,因此类似
http://kylewbanks.com/rest/posts
将读取所有帖子。当通过POST或PUT调用此功能时,意味着您希望对帖子执行某些操作(即删除所有或多个帖子,用另一个资源集合替换它们等)。阅读Wiki链接,再次了解RESTful API。非常感谢
Server responded with status code: 500