Android 如何减少HTTPURLConnection代码
已解决: 我已经使用了翻新库的建议,它减少了我的代码分配。谢谢您的帮助。 我有一个android应用程序,在页面上,当有人点击开关时,我会在下面显示代码,它将使用PUT将数据作为JSON发送到服务器。然而,我不知道我如何才能减少这段代码,使我可以再次使用它。我不想继续复制和粘贴相同的代码,更改请求方法或我正在写入的字节类型 这是我的oncreate中的代码,当开关打开时,它将执行图B中的操作。我希望在开关关闭时将其删除,而不必从图B复制相同的代码并进行更改,然后执行它。Android 如何减少HTTPURLConnection代码,android,Android,已解决: 我已经使用了翻新库的建议,它减少了我的代码分配。谢谢您的帮助。 我有一个android应用程序,在页面上,当有人点击开关时,我会在下面显示代码,它将使用PUT将数据作为JSON发送到服务器。然而,我不知道我如何才能减少这段代码,使我可以再次使用它。我不想继续复制和粘贴相同的代码,更改请求方法或我正在写入的字节类型 这是我的oncreate中的代码,当开关打开时,它将执行图B中的操作。我希望在开关关闭时将其删除,而不必从图B复制相同的代码并进行更改,然后执行它。 test.setOnCl
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((Switch) v).isChecked();
if(on)
{
//Do something when switch is on/checked
new RetrieveFeedTask().execute();
new newtask().execute();
}
else
{
//Do something when switch is off/unchecked
}
}
});
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.post("https://www.google.com", params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
});
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
图B
class RetrieveFeedTask extends AsyncTask<String, String, String> {
private Exception exception;
protected String doInBackground(String... urls) {
URL url = null;
try {
String strUrl = "http://192.168.0.104:5053/TEST";
url = new URL(strUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; charset");
connection.setDoInput(true);
connection.setDoOutput(true);
OutputStream stream = connection.getOutputStream();
DataOutputStream writer = new DataOutputStream(stream);
connection.connect();
//Log.d("WARN", "TEST");
// The LogCat prints out data like:
// ID:test,Email:test@gmail.com,Pwd:test
String suuid = UUID.randomUUID().toString();
writer.writeBytes("{\"id\" : \""+suuid+ "\", \"sensorType\" : \"sound\", \"threshold\" : \"50\", \"operator\" : \">\", \"actuator\" : \"1\", \"actuatorAction\" : \"4\"}");
writer.flush();
writer.close();
InputStream response = connection.getInputStream();
StringBuilder sb = new StringBuilder();
BufferedReader bf = new BufferedReader(new InputStreamReader(response, "utf-8"));
String responseLine = bf.readLine();
while(responseLine != null) {
sb.append(responseLine);
responseLine = bf.readLine();
}
stream.close();
System.out.println("executed");
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
return "fff";
}
protected String onPostExecute() {
// TODO: check this.exception
// TODO: do something with the feed
return "ASDASD";
}
}
class RetrieveFeedTask扩展了AsyncTask{
私人例外;
受保护的字符串doInBackground(字符串…URL){
URL=null;
试一试{
字符串strUrl=”http://192.168.0.104:5053/TEST";
url=新url(strUrl);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
setRequestProperty(“内容类型”、“应用程序/json;字符集”);
connection.setDoInput(true);
connection.setDoOutput(真);
OutputStream=connection.getOutputStream();
DataOutputStream编写器=新的DataOutputStream(流);
connection.connect();
//日志d(“警告”、“测试”);
//LogCat打印出如下数据:
//ID:测试,电子邮件:test@gmail.com,Pwd:测试
字符串suuid=UUID.randomUUID().toString();
writer.writeBytes(“{\'id\”:\\'+suuid+“\”,“sensorType\”:“sound\”,“threshold\”:“50\”,“operator\”:\“>”,“actuatorAction\”:“1\”,“actuatorAction\”:“4\”);
writer.flush();
writer.close();
InputStream响应=connection.getInputStream();
StringBuilder sb=新的StringBuilder();
BufferedReader bf=新的BufferedReader(新的InputStreamReader(响应,“utf-8”));
字符串responseLine=bf.readLine();
while(responseLine!=null){
某人附加(应答线);
responseLine=bf.readLine();
}
stream.close();
系统输出打印项次(“已执行”);
连接断开();
}捕获(IOE异常){
e、 printStackTrace();
}
返回“fff”;
}
受保护的字符串onPostExecute(){
//TODO:检查此项。异常
//TODO:对提要做些什么
返回“ASDASD”;
}
}
如果需要更清楚的信息,请告诉我。使用
示例代码:
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((Switch) v).isChecked();
if(on)
{
//Do something when switch is on/checked
new RetrieveFeedTask().execute();
new newtask().execute();
}
else
{
//Do something when switch is off/unchecked
}
}
});
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.post("https://www.google.com", params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
});
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
Gradle:
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((Switch) v).isChecked();
if(on)
{
//Do something when switch is on/checked
new RetrieveFeedTask().execute();
new newtask().execute();
}
else
{
//Do something when switch is off/unchecked
}
}
});
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.post("https://www.google.com", params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
});
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
使用
示例代码:
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((Switch) v).isChecked();
if(on)
{
//Do something when switch is on/checked
new RetrieveFeedTask().execute();
new newtask().execute();
}
else
{
//Do something when switch is off/unchecked
}
}
});
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.post("https://www.google.com", params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
});
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
Gradle:
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((Switch) v).isChecked();
if(on)
{
//Do something when switch is on/checked
new RetrieveFeedTask().execute();
new newtask().execute();
}
else
{
//Do something when switch is off/unchecked
}
}
});
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.post("https://www.google.com", params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
});
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
为此,您可以使用非常轻量级的离子库。Github上有使用示例:您可以为此使用非常轻量级的离子库。Github上有使用示例:Android Volley(已弃用): 或 改装:
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((Switch) v).isChecked();
if(on)
{
//Do something when switch is on/checked
new RetrieveFeedTask().execute();
new newtask().execute();
}
else
{
//Do something when switch is off/unchecked
}
}
});
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.post("https://www.google.com", params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
});
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
- 类型安全HTTP客户端
- 就易用性、性能、捕获、可扩展性、多部分上传和其他方面而言,改型无疑是凌空截击的更好选择。它是一个类型安全的REST客户端 ()
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean on = ((Switch) v).isChecked();
if(on)
{
//Do something when switch is on/checked
new RetrieveFeedTask().execute();
new newtask().execute();
}
else
{
//Do something when switch is off/unchecked
}
}
});
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.post("https://www.google.com", params, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
});
dependencies {
compile 'com.loopj.android:android-async-http:1.4.9'
}
- 类型安全HTTP客户端
- 就易用性、性能、捕获、可扩展性、多部分上传和其他方面而言,改型无疑是凌空截击的更好选择。它是一个类型安全的REST客户端 ()
public class HttpConnection extends AsyncTask<String, String, String> {
private final String mBytes;
private final String mMethod;
public HttpConnection(String method, String bytes) {
mMethod = method;
mBytes = bytes;
}
@Override
protected String doInBackground(String... strings) {
// ... open connection
writer.writeBytes(mBytes);
return null;
}
公共类HttpConnection扩展异步任务{
专用最终字符串MB;
私有最终字符串方法;
公共HttpConnection(字符串方法,字符串字节){
M方法=方法;
MB=字节;
}
@凌驾
受保护的字符串背景(字符串…字符串){
//…开放连接
writer.writeBytes(MB);
返回null;
}
显然,您可以将其更改为使用您想要/需要的任何参数。首先,我建议使用网络库(改型、Volly等),因为直接处理http连接要复杂一些,并且容易出现库可能已经解决的错误 但是,如果您仍然希望直接使用http连接,您可以创建一个httpConnection任务来扩展异步任务,并在创建时获取必要的参数 比如说-
public class HttpConnection extends AsyncTask<String, String, String> {
private final String mBytes;
private final String mMethod;
public HttpConnection(String method, String bytes) {
mMethod = method;
mBytes = bytes;
}
@Override
protected String doInBackground(String... strings) {
// ... open connection
writer.writeBytes(mBytes);
return null;
}
公共类HttpConnection扩展异步任务{
专用最终字符串MB;
私有最终字符串方法;
公共HttpConnection(字符串方法,字符串字节){
M方法=方法;
MB=字节;
}
@凌驾
受保护的字符串背景(字符串…字符串){
//…开放连接
writer.writeBytes(MB);
返回null;
}
显然,您可以将其更改为使用您想要/需要的任何参数。建议使用。对于每个活动维护一个或多个异步任务,我没有什么大问题。预处理和后处理步骤通常不同,如果仔细分析,您可能会发现大部分代码是不同的。@ADM谢谢,我已经使用了retro调整并减少代码分配。我不知道如何让你的答案成为答案,但我非常感谢你。建议使用。我对每个活动维护一个或多个异步任务没有什么大问题。前后步骤通常是不同的,如果你仔细分析,你可能会发现大部分代码是不同的。@ADM谢谢你,我知道了