Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Http请求POST JSON_Java_Android - Fatal编程技术网

Java Android Http请求POST JSON

Java Android Http请求POST JSON,java,android,Java,Android,我正在尝试创建一个函数来发出请求,但它给出了一些错误,我已经向internet授予了权限,但仍然存在错误 这是我的代码: 公共字符串请求(字符串Url、JSONObject数据){ HttpClient HttpClient=新的DefaultHttpClient(); HttpPost HttpPost=新的HttpPost(Url); 输入流输入流; 字符串内容=”; 试一试{ setEntity(新的StringEntity(Data.toString()); HttpResponse r

我正在尝试创建一个函数来发出请求,但它给出了一些错误,我已经向internet授予了权限,但仍然存在错误

这是我的代码:

公共字符串请求(字符串Url、JSONObject数据){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(Url);
输入流输入流;
字符串内容=”;
试一试{
setEntity(新的StringEntity(Data.toString());
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
while(true){
如果(实体!=null){
inputstream=entity.getContent();
content=inputstream.toString();
打破
}
}
}捕获(例外情况除外){
返回例如toString();
} 
返回内容;
}
输入:

JSONObject data=newjsonobject();
数据输入(“teste”、“teste”);
字符串响应=请求('urlExample',数据);
Toast.makeText(getApplicationContext(),response,Toast.LENGTH_SHORT.show();
输出:

android.os.NetworkOnMainThreadExecption

未在主线程上启动网络操作。您可以创建另一个线程来运行它

Thread thread = new Thread(new Runnable(){ 
     @Override public void run(){ 
         // Run request here !!!!
      } 
    });
thread.start();

我建议您使用我在评论中提到的AsyncTask:

private class LongOperation extends AsyncTask<Void, Void, String> {

        private String mUrl;
        private JSONObject mData;

        public LongOperation(String url, JSONObject data) {
           mUrl = url;
           mData = data;
        }

        @Override
        protected String doInBackground(Void... params) {
            return request(mUrl, mData);
        }

        @Override
        protected void onPostExecute(String response) {
           Toast.makeText(getApplicationContext(),response,
              Toast.LENGTH_SHORT).show();
        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
}

我建议您使用
**Volley**
,它是一个客户端库,可以帮助您处理Http请求


搜索
StringRequest

您想要将数据发布到API,所以您需要在后台而不是在主线程上执行此操作。你可以使用一些简单的asycTask.No.No,我的意思是忘记AcyCtask,也可以考虑使用像改装一样的库,它处理线程和大部分错误。handling@barotia我理解你的担忧,但我认为像AsyncTask这样简单的方法可以解决他的问题。后来,如果他感兴趣,他可以通过改造、RxJava、Kotlin协同程序等。为什么你会坚持旧的东西,而不是学习正确的方法?今年你会学到很多不必要的东西way@barotia正确使用和处置AsyncTasks并没有什么问题。很多花哨的“图书馆”都不能声称这是一个古老而仍在运行的图书馆。如果你只需要做一个请求,就不需要添加改装、RXJava,更不用说协同程序(这对新手来说很复杂)。也不要这么做。^这个线程不支持取消,不使用线程池,不能冒泡等等。如果你有更好的机制,就不要在Android上这么做。即使是执行器池也更好。谢谢,我不能确切地使用此代码,所以我研究了AsyncTask并能够开发它,不管怎样,谢谢您的代码可以帮助我制作
JSONObject data = new JSONObject();
data.put("teste","teste");
new LongOperation('urlExample', data).execute();