7天后如何只发送一次Server请求?

时间:2016-09-08 07:28:51

标签: android

我正在开发一个应用程序,当用户将应用程序保存在他们的设备中时,其中的情况就是这样,然后7天之后我必须发送服务器请求以通知服务器。我怎么能这样做。

注意: - 我只需要在7天后发送服务器请求,而不是在7天后再发送一次。

3 个答案:

答案 0 :(得分:2)

正如我告诉过你的那样。这是代码。我已经提到了需要实现Server请求的地方。你不需要改变其他任何东西。玩得开心。

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class MainActivity extends Activity {

SharedPreferences sharePref;
String endTime, currentTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.child);
    sharePref=getSharedPreferences("App", Context.MODE_PRIVATE);

    if(sharePref.getBoolean("isFirstTime", true)) {
        checkFinalTime();
    }
    else if (!sharePref.getBoolean("isRequestSend", false)){
        checkRemainingTime();
    }
}

private void checkFinalTime(){
    Calendar c = Calendar.getInstance();
    c.add(Calendar.DAY_OF_YEAR, 7);

    endTime = String.valueOf(c.get(Calendar.MONTH) + 1) + "/" + String.valueOf(c.get(Calendar.DAY_OF_MONTH)) + "/" +
            String.valueOf(c.get(Calendar.YEAR)) + " " + String.valueOf(c.get(Calendar.HOUR_OF_DAY)) + ":" +
            String.valueOf(c.get(Calendar.MINUTE)) + ":" + String.valueOf(c.get(Calendar.SECOND));
    Log.d("End Time", endTime);
    SharedPreferences.Editor editor = sharePref.edit();
    editor.putBoolean("isFirstTime", false);
    editor.putString("endTime", endTime);
    editor.apply();
}

private void checkRemainingTime() {

    Calendar c = Calendar.getInstance();
    currentTime = String.valueOf(c.get(Calendar.MONTH) + 1) + "/" + String.valueOf(c.get(Calendar.DAY_OF_MONTH)) + "/" +
            String.valueOf(c.get(Calendar.YEAR)) + " " + String.valueOf(c.get(Calendar.HOUR_OF_DAY)) + ":" +
            String.valueOf(c.get(Calendar.MINUTE)) + ":" + String.valueOf(c.get(Calendar.SECOND));

    endTime = sharePref.getString("endTime", null);

    Log.d("Current Time", currentTime);
    Log.d("End Time", endTime);

    if (endTime != null) {

        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

        Date d1 = null;
        Date d2 = null;

        try {
            d1 = format.parse(currentTime);
            d2 = format.parse(endTime);

            long diff = d2.getTime() - d1.getTime();

            if (diff >= 0) {

                // Do the Server Request here. Don't delete anything.

                Log.d("Diff", String.valueOf(diff));
                SharedPreferences.Editor editor = sharePref.edit();
                editor.putBoolean("isRequestSend", true);
                editor.apply();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
}

保重

答案 1 :(得分:0)

尝试使用Timer计划“向服务器任务发送请求”,类似于此,更改为相关参数。

 TimerTask tasknew = new TimerSchedulePeriod();
 Timer timer = new Timer();

 // scheduling the task at interval
 timer.schedule(tasknew,100, 100); 

答案 2 :(得分:0)

这可能会对你有帮助。

您可以从

获取应用安装时间

PackageManager pm = context.getPackageManager(); ApplicationInfo appInfo = pm.getApplicationInfo("app.package.name", 0); String appFile = appInfo.sourceDir; long installed = new File(appFile).lastModified();

您可以获取系统的当前日期,并轻松检查7天是否结束,您可以设置标志以检查api是否被击中。

您可以使用服务或在用户启动活动时执行此操作。