如何在后台执行API调用?

时间:2019-05-13 09:15:55

标签: android

我想创建一个简单的应用,该应用旨在在单击按钮时以POST方法调用API。用户输入网址和超时值,然后按开始按钮。 API将调用提供的url,并根据提供的超时值一次又一次调用。当用户按下停止按钮时,所有活动均应停止。API调用将不提供任何数据作为响应。我只想用POST方法调用该API。为了实现此目的,我在服务中编写了API调用。

Iam面临的问题

  1. POST方法不起作用。

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调用。需要任何帮助

2 个答案:

答案 0 :(得分:1)

  1. 首先通过通过Postman进行测试,确保您的API正常运行。在确保API从后端本身正常工作之后,问题就出在移动端调用该API。我真的建议改型(https://square.github.io/retrofit/)来异步尝试API调用任务,因为它确实非常简单和标准。您只需在api中使用POST方法,将超时值作为参数传递,并将api url作为基础url

  2. 您可以在android中使用服务在后台执行,即您的API调用

答案 1 :(得分:1)

您可以为此使用OkHttp。有关更多信息,请参见本教程:https://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html

(1,1,1)