我想创建一个简单的应用,该应用旨在在单击按钮时以POST方法调用API。用户输入网址和超时值,然后按开始按钮。 API将调用提供的url,并根据提供的超时值一次又一次调用。当用户按下停止按钮时,所有活动均应停止。API调用将不提供任何数据作为响应。我只想用POST方法调用该API。为了实现此目的,我在服务中编写了API调用。
Iam面临的问题
2。如何根据提供的超时值在后台调用此api ??
我做了什么
我的MainActivity
url = (EditText)findViewById(R.id.editText3);
timeOut = (EditText)findViewById(R.id.editText5);
Button clickButton = (Button) findViewById(R.id.start);
clickButton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, APIService.class);
Bundle bund = new Bundle();
bund.putString("url",url.getText().toString());
bund.putString("timeout",timeOut.getText().toString());
intent.putExtras(bund);
startService(intent);
}
});
Button stopbutton = (Button) findViewById(R.id.stop);
stopbutton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, APIService.class);
stopService(intent);
}
});
我的API服务类
public APIService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
Toast.makeText(this, " Client API Service Started", Toast.LENGTH_LONG).show();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Client API Service Started", Toast.LENGTH_LONG).show();
String WEBURL;
String TimeOut;
Bundle bund = intent.getExtras();
WEBURL=bund.getString("url");
TimeOut=bund.getString("timeout");
String URL= "http://"+WEBURL+"/API/ReportSubscription/GetAllReportSubscription?subscriptionUR="+WEBURL;
new HttpRequestTask(
new HttpRequest(URL, HttpRequest.POST),
new HttpRequest.Handler() {
@Override
public void response(HttpResponse response) {
if (response.code == 200) {
Log.d(this.getClass().toString(), "Request successful!");
} else {
Log.e(this.getClass().toString(), "Request unsuccessful: " + response);
}
}
}).execute();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Client API Service Stopped", Toast.LENGTH_LONG).show();
}
}
我使用了'com.apptakk.http_request:http-request:0.1.2'进行Web API调用。需要任何帮助
答案 0 :(得分:1)
首先通过通过Postman进行测试,确保您的API正常运行。在确保API从后端本身正常工作之后,问题就出在移动端调用该API。我真的建议改型(https://square.github.io/retrofit/)来异步尝试API调用任务,因为它确实非常简单和标准。您只需在api中使用POST方法,将超时值作为参数传递,并将api url作为基础url
您可以在android中使用服务在后台执行,即您的API调用
答案 1 :(得分:1)
您可以为此使用OkHttp。有关更多信息,请参见本教程:https://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html
(1,1,1)