Android:AsyncTask中的OkHttp请求被调用两次

时间:2017-05-18 12:34:27

标签: android android-asynctask okhttp

我在async taks doInBackgroun()中有一个OkHttp请求,resquest有点沉重,需要一些时间在我的后端。不幸的是,看起来当OKHttp没有立即得到答案时它会再次尝试,这会让我的服务器爆炸!

我试图禁用此功能,但它似乎忽略了它......我该怎么办?

public class AsyncUpdateNewPatients  extends AsyncTask<Object, Void, Boolean> {
    private static OkHttpClient okHttpClient;
    private static DatabaseHandler db;

    ActivityMain activityMain;
    public AsyncUpdateNewPatients (ActivityMain atv)
    {
        this.activityMain = atv;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                Stormpath.logger().d(message);
            }
        });
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new OkHttpClient.Builder()
                .addNetworkInterceptor(httpLoggingInterceptor)
                .retryOnConnectionFailure(false)
                .connectTimeout(15, TimeUnit.SECONDS)
                .readTimeout(15L, TimeUnit.SECONDS)
                .writeTimeout(15L, TimeUnit.SECONDS)
                .build();
        db = new DatabaseHandler(activityMain);
    }

    @Override
    protected Boolean doInBackground(Object... objects) {
        List<PatientData> allNewPatients = db.getAllNewPatients();

        JSONArray allNewPatientJSONArray = new JSONArray();
        for (PatientData tempPatientObject : allNewPatients) {
            JSONObject tempPatientJSON = new JSONObject();
            try {
                tempPatientJSON.put("firstName", tempPatientObject.getFirstName());
                tempPatientJSON.put("lastName", tempPatientObject.getLastName());
                tempPatientJSON.put("height", tempPatientObject.getHeight());
                tempPatientJSON.put("weight", tempPatientObject.getWeight());
                tempPatientJSON.put("vaccines", tempPatientObject.getVaccinHistory());
                tempPatientJSON.put("address", tempPatientObject.getAddress());
                tempPatientJSON.put("zone", tempPatientObject.getZone());
                tempPatientJSON.put("id", tempPatientObject.getId());

                String dateOfBirth = tempPatientObject.getDateOfBirth().get(Calendar.DAY_OF_MONTH) + "/" + tempPatientObject.getDateOfBirth().get(Calendar.MONTH) + "/" + tempPatientObject.getDateOfBirth().get(Calendar.YEAR);
                tempPatientJSON.put("dob",dateOfBirth);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            allNewPatientJSONArray.put(tempPatientJSON);
        }

        if(allNewPatients.size() > 0){
            JSONObject bodyJSON = new JSONObject();
            try {
                bodyJSON.put("allNewPatients", allNewPatientJSONArray);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
            final RequestBody body = RequestBody.create(JSON, String.valueOf(bodyJSON));

            Request request = new Request.Builder()
                    .url(activityMain.getString(R.string.main_url) + "/api/syncFromOffLine")
                    .headers(buildStandardHeaders(Stormpath.accessToken()))
                    .post(body)
                    .build();

            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.d("DEBEUG", "error: " + e.getMessage());
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if(response.code() == 200){
                        Log.d("DEBEUG", "response: " + response.body().string());
                    } else {
                        Log.d("DEBEUG", "there was an error: " + response.message().toString());
                    }
                }
            });
        }
        return true;
    }

0 个答案:

没有答案