应用程序关闭时清除服务器上的数据库

时间:2015-09-16 21:01:20

标签: android

我希望清除服务器端的表,以便在用户关闭应用程序时删除与特定mac地址相关的所有数据。因此,我试图在调用onDestroy()时启动Intentservice类。目前,当我关闭应用程序时,onHandleIntent未被调用且没有任何反应。

MainActivity类

@Override
protected void onDestroy() {
    super.onDestroy();
    WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    WifiInfo wInfo = wifiManager.getConnectionInfo();
    String macAddress = wInfo.getMacAddress();

     JsonObject  jsonObject = new  JsonObject();
     jsonObject.addProperty("mac", macAddress);

    System.out.println("JsonObject" + jsonObject);

    String json = jsonObject.toString();

    Intent intent2 = new Intent(MainActivity.this,
            ClearTable.class);
    intent2.putExtra("json_mac", json);
    startService(intent2);
      }
MainActivity中的

onDestroy:

@Override
protected void onDestroy() {
    super.onDestroy();
    WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    WifiInfo wInfo = wifiManager.getConnectionInfo();
    String macAddress = wInfo.getMacAddress();

     JsonObject  jsonObject = new  JsonObject();
     jsonObject.addProperty("mac", macAddress);

    System.out.println("JsonObject" + jsonObject);

    String json = jsonObject.toString();

    Intent intent2 = new Intent(MainActivity.this,
            ClearTable.class);
    intent2.putExtra("json_mac", json);
    startService(intent2);

}

IntentService类:

public class ClearTable extends IntentService{

    public ClearTable() {
        super("IntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        BufferedReader reader = null;

        try {
            String jSONString = intent.getStringExtra("json_mac");
            System.out.println("xyz The output of : doInBackground "
                    + jSONString);
            URL myUrl = new URL(
                    "https://serverside-apple.rhcloud.com/webapi/test");
            HttpURLConnection conn = (HttpURLConnection) myUrl
                    .openConnection();
            conn.setRequestMethod("POST");
            conn.setConnectTimeout(10000);
            conn.setReadTimeout(10000);
            conn.connect();             
            DataOutputStream wr = new DataOutputStream(
                    conn.getOutputStream());
            // write to the output stream from the string
            wr.writeBytes(jSONString);
            wr.close();             
            System.out.println("xyz The output of getResponsecode: "
             + conn.getResponseCode());

        } catch (IOException e) {

            e.printStackTrace();

        } finally {
            if (reader != null) {
                try {
                    reader.close();

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }   

    }

}

清单:

 <service android:name=".ClearTable" />

3 个答案:

答案 0 :(得分:0)

在服务器端控制器(即处理请求)上执行操作(即函数)以清除要清除的表,并通过url发送请求来调用它(包括指示调用该操作的值)

答案 1 :(得分:0)

首先:确保在测试时确实隐藏了应用程序,即按下主页按钮只会暂停应用程序“onPause()”和稍后“onStop()”,但不会将其关闭“onDestroy()”。看一下本页中间的图形Android Activity Lifecycle(向下滚动直到你看到图像)

要真正关闭它,你需要按下你的多任务按钮(在当前的Android手机上通常有一个背面和主页按钮旁边的多任务按钮)并从屏幕上刷你的应用程序。

第二:尝试最后调用super.onDestroy()

  

@覆盖

     

protected void onDestroy(){

     

你的代码在这里

     

super.onDestroy();

     

}

答案 2 :(得分:0)

由于documentation也表示无法保证onDestroy()调用,因此如果您想确保调用函数,则需要实现onPause()方法(即使这很难因为您的数据会被更频繁地删除,但这是唯一有保障的方式。)