Как вернуть значение после вызова API android (при каждом вызове функции и возвращаемого значения)? - PullRequest
0 голосов
/ 27 марта 2019

Ниже приведен мой код в Util.java ;

public static String getToken() {
    JSONObject postdata = new JSONObject();
    try {
        AppUtill.getJsonWithHTTPPost(context, 1, new ServiceCallBack() {
            @Override
            public void serviceCallback(int id, JSONObject jsonResult) {
                try {
                    if (jsonResult.getString("Status").equalsIgnoreCase("Success")) {
                        JSONObject jsonObject = jsonResult.getJSONObject("Data");
                        String apptime = jsonObject.optString("apptime");
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        String currentDateandTime = sdf.format(new Date());
                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        Calendar calendar1 = Calendar.getInstance();
                        Calendar calendar2 = Calendar.getInstance();

                        Date date1 = dateFormat.parse(apptime);
                        Date date2 = dateFormat.parse(currentDateandTime);

                        calendar1.setTime(date1);
                        calendar2.setTime(date2);

                        long diff = date1.getTime() - date2.getTime();
                        long seconds = diff / 1000;

                        calendar2.add(Calendar.SECOND, (int) seconds);
                        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
                         new_date = "FoodHIT" + sdf1.format(calendar2.getTime());
                        new_date = encryptStringmd5(new_date);
                        System.out.println("Compare Result : " + seconds);
                        System.out.println("AppTime: " + jsonObject.optString("apptime"));
                        System.out.println("token : " + new_date);

                        Prefs.putString("security_token",new_date);

                        Log.e("NNNNNNNNNNNNNNNN",""+new_date);
                    } else {
                        Toast.makeText(context, jsonResult.getString("Message"), Toast.LENGTH_SHORT).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        }, AppUtill.getapptime, postdata);
    } catch (Exception e) {
        e.printStackTrace();
    }

    Log.e("new_date........",""+new_date);
    return new_date;
}

В Activity.java файле, когда я вызываю эту функцию, он дает первый раз ноль;

String token= AppUtill.getToken()   // gives null for first time

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

Попробуйте использовать функцию обратного вызова интерфейса

Шаг 1: создать интерфейс

Пример.

public interface Result {

    public void success(String result);
}

Шаг 2: создать интерфейсный объект

    Result result=new Result() {

                @Override
                public void success(String result) {
                   String token=result;
                    // it will return result here....

                }
            };

передать интерфейсный объект в getToken () ex.

AppUtill.getToken(result);

ваш метод

  public static String getToken(Result result) {

// here your logic to call API

 //after result call
    result.success(result)//pass your result here
    }
0 голосов
/ 27 марта 2019

Я получил ответ через решение ниже:

    public static class Example extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {
        JSONObject postdata = new JSONObject();
        try {
            AppUtill.getJsonWithHTTPPost(context, 1, new ServiceCallBack() {
                @Override
                public void serviceCallback(int id, JSONObject jsonResult) {
                    try {
                        if (jsonResult.getString("Status").equalsIgnoreCase("Success")) {
                            JSONObject jsonObject = jsonResult.getJSONObject("Data");
                            String apptime = jsonObject.optString("apptime");
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                            String currentDateandTime = sdf.format(new Date());
                            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                            Calendar calendar1 = Calendar.getInstance();
                            Calendar calendar2 = Calendar.getInstance();

                            Date date1 = dateFormat.parse(apptime);
                            Date date2 = dateFormat.parse(currentDateandTime);

                            calendar1.setTime(date1);
                            calendar2.setTime(date2);

                            long diff = date1.getTime() - date2.getTime();
                            long seconds = diff / 1000;

                            calendar2.add(Calendar.SECOND, (int) seconds);
                            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
                            new_date = "FoodHIT" + sdf1.format(calendar2.getTime());
                            new_date = encryptStringmd5(new_date);
                            System.out.println("Compare Result : " + seconds);
                            System.out.println("AppTime: " + jsonObject.optString("apptime"));
                            System.out.println("token : " + new_date);

                            Prefs.putString("security_token", new_date);

                            Log.e("NNNNNNNNNNNNNNNN",""+ new_date);
                        } else {
                            Toast.makeText(context, jsonResult.getString("Message"), Toast.LENGTH_SHORT).show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
            }, AppUtill.getapptime, postdata);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return new_date;
    }


    @Override
    protected void onPostExecute(String result) {
        // execution of result of Long time consuming operation
      new_date=result;
    }


}

Хранить в функции ниже:

 public static String getTokenn()  {
    try {
        return new Example().execute().get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    return null;
}

и получите значение по следующему коду:

String token= AppUtill.getTokenn();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...