我希望清除服务器端的表,以便在用户关闭应用程序时删除与特定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" />
答案 0 :(得分:0)
在服务器端控制器(即处理请求)上执行操作(即函数)以清除要清除的表,并通过url发送请求来调用它(包括指示调用该操作的值)
答案 1 :(得分:0)
首先:确保在测试时确实隐藏了应用程序,即按下主页按钮只会暂停应用程序“onPause()”和稍后“onStop()”,但不会将其关闭“onDestroy()”。看一下本页中间的图形Android Activity Lifecycle(向下滚动直到你看到图像)
要真正关闭它,你需要按下你的多任务按钮(在当前的Android手机上通常有一个背面和主页按钮旁边的多任务按钮)并从屏幕上刷你的应用程序。
第二:尝试最后调用super.onDestroy()
@覆盖
protected void onDestroy(){
你的代码在这里
super.onDestroy();
}
答案 2 :(得分:0)
由于documentation也表示无法保证onDestroy()
调用,因此如果您想确保调用函数,则需要实现onPause()
方法(即使这很难因为您的数据会被更频繁地删除,但这是唯一有保障的方式。)