Java Android Http请求POST JSON
我正在尝试创建一个函数来发出请求,但它给出了一些错误,我已经向internet授予了权限,但仍然存在错误 这是我的代码: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
公共字符串请求(字符串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();