Php 第一次呼叫后截击错误的post响应
我想做的事 我正在尝试在我的应用程序中实现一个简单的离线功能,当设备离线时,员工可以休假,当设备在线时,更新将数据留给服务器的功能,为此我正在执行以下步骤Php 第一次呼叫后截击错误的post响应,php,android,android-volley,offlineapps,Php,Android,Android Volley,Offlineapps,我想做的事 我正在尝试在我的应用程序中实现一个简单的离线功能,当设备离线时,员工可以休假,当设备在线时,更新将数据留给服务器的功能,为此我正在执行以下步骤 如果设备脱机,则将数据存储在本地数据库中 通过广播接收器检查连接更改 当设备联机时,通过网络调用将数据发布到web服务器 所有这些都可以正常工作,数据也可以正确地发布到web服务器上,但问题是,它只是第一次发布,之后就不起作用了 到目前为止我对这个问题的了解 每次我进行一次干净的安装时,它都工作得很好,但是当我再次尝试进行另一次网络调用以
- 如果设备脱机,则将数据存储在本地数据库中
- 通过广播接收器检查连接更改
- 当设备联机时,通过网络调用将数据发布到web服务器
if (isNetworkAvailable(getContext())) {
BackgroundWorkerLeave backgroundWorker = new BackgroundWorkerLeave(getContext());
backgroundWorker.execute("leave", from_date, to_date, day_count, leave_type, reason, emp_id);
} else {
// save data offline
db = new DatabaseHelper(getContext());
db.insertItem(from_date, to_date, day_count, leave_type, reason);
}
NetworkChangeReceiver//用于网络更改监控的广播接收器
公共类MyReceiver扩展了BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.v("MyReceiver","Received intent..");
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {
DatabaseHelper db = new DatabaseHelper(context);
int count = db.getofflineCount();
// Toast.makeText(context, String.valueOf(count), Toast.LENGTH_LONG).show();
//
if (count > 0) {
Toast.makeText(context, "Internet connected updating data...", Toast.LENGTH_SHORT).show();
OfflineWorkerLeave offlineWorkerLeave = new OfflineWorkerLeave(context, db.getAllOfflineLeave());
offlineWorkerLeave.updateLeave();
}else {
Toast.makeText(context, "All updated", Toast.LENGTH_SHORT).show();
}
} else if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.DISCONNECTED) {
Toast.makeText(context, "Offline mode activated..", Toast.LENGTH_SHORT).show();
}
}
}
}
DatabaseHelper.class
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "my.db";
private static final String TABLE_NAME = "employee_leave";
private static final String COL_ID = "col_id";
private static final String COL_DAYCOUNT = "daycount";
private static final String COL_FROM = "from_date";
private static final String COL_TO = "to_date";
private static final String COL_TYPE = "type";
private static final String COL_REASON = "reason";
Context context;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS leave(date_applied varchar, date_leave varchar, status varchar);");
db.execSQL("CREATE TABLE IF NOT EXISTS " +
TABLE_NAME + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COL_FROM +
" TEXT," + COL_TO + " TEXT," + COL_DAYCOUNT +
" TEXT," + COL_TYPE + " TEXT," +
COL_REASON + " TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//this method will add users in the database
public void insertItem(String from, String to, String status) {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("INSERT INTO leave VALUES ('" + from + "','" + to + "','" + status + "');");
db.close();
}
public void insertItem(String from, String to, String day_count, String leave_type, String reason) {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("INSERT INTO " + TABLE_NAME + " (from_date,to_date,daycount,type,reason)" +
" VALUES ('" + from + "','" + to + "','" + day_count + "','" +
leave_type + "','" + reason + "');");
Toast.makeText(context, "Leave stored on the device", Toast.LENGTH_LONG).show();
db.close();
}
public int getofflineCount() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * from " + TABLE_NAME, null);
return c.getCount();
}
public Map<String, String> getAllOfflineLeave() {
Map<String, String> params = new HashMap<String, String>();
SharedPreferences sp_login = context.getSharedPreferences("login_status", Context.MODE_PRIVATE);
SharedPreferences.Editor login_editor = sp_login.edit();
String emp_id = sp_login.getString("userid", "null");
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * from " + TABLE_NAME + " ORDER BY " + COL_ID + " DESC LIMIT 1", null);
if (c.moveToFirst()) {
params.put("from_date", c.getString(1));
params.put("to_date", c.getString(2));
params.put("day_count", c.getString(3));
params.put("leave_type", c.getString(4));
params.put("reason", c.getString(5));
params.put("emp_id", emp_id);
}
c.close();
db.close();
return params;
}
public List<Model> getAllLeave() {
List<Model> leaveList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * from leave", null);
while (c.moveToNext()) {
Model logs = new Model();
String status = "";
logs.setFdate(c.getString(0));
logs.setTdate(c.getString(1));
if (c.getString(2).equals("0")) {
status = "Rejected";
} else if (c.getString(2).equals("2")) {
status = "Approved";
} else {
status = "Pending";
}
logs.setLeaveReason(status);
leaveList.add(logs);
}
c.close();
db.close();
return leaveList;
}
public void deleteRecord() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE from leave");
db.close();
}
public void deleteOfflineRecord() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE from " + TABLE_NAME);
db.close();
}
public class OfflineWorkerLeave {
Context context;
DatabaseHelper db;
Map<String, String> params;
public OfflineWorkerLeave(Context context, Map<String, String> params) {
this.context = context;
this.params = params;
db = new DatabaseHelper(context);
}
public void updateLeave() {
String url = "exapmle.com/applyleave.php";
StringRequest request = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.contains("1\t")){
Toast.makeText(context, "Successfully data updated", Toast.LENGTH_SHORT).show();
db.deleteOfflineRecord();
} else if (response.contains("0\t")){
Toast.makeText(context, "Something went wrong", Toast.LENGTH_SHORT).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(request);
}
public类DatabaseHelper扩展了SQLiteOpenHelper{
私有静态最终字符串数据库\u NAME=“my.db”;
私有静态最终字符串表\u NAME=“employee\u leave”;
私有静态最终字符串COL\u ID=“COL\u ID”;
私有静态最终字符串COL_DAYCOUNT=“DAYCOUNT”;
私有静态最终字符串COL_FROM=“FROM_date”;
私有静态最终字符串COL_TO=“TO_date”;
私有静态最终字符串COL_TYPE=“TYPE”;
私有静态最终字符串COL_REASON=“REASON”;
语境;
公共数据库助手(上下文){
super(上下文,数据库名称,null,1);
this.context=上下文;
}
@凌驾
public void onCreate(SQLiteDatabase db){
execSQL(“如果不存在,则创建表leave(date_applied varchar,date_leave varchar,status varchar);”;
db.execSQL(“如果不存在,则创建表”+
表“\u NAME+”(“+COL\u ID+”整型主键自动递增“+COL\u FROM+
“文本,”+COL_至+“文本,”+COL_日计数+
文本,“+COL_TYPE+”文本+
COL_REASON+“TEXT”);”;
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
}
//此方法将在数据库中添加用户
public void insertItem(字符串从、字符串到、字符串状态){
SQLiteDatabase db=this.getWritableDatabase();
execSQL(“插入到左值(““+from+”、“+to+”、“+status+”);”);
db.close();
}
public void insertItem(字符串开始、字符串结束、字符串日期计数、字符串离开类型、字符串原因){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL(“插入到”+表名+”(从日期、到日期、天数、类型、原因)+
“值(“+from+”、“+to+”、“+day_count+”、“”+
保留“_type+”、““+reason+”);”;
Toast.makeText(上下文,“保留存储在设备上”,Toast.LENGTH_LONG.show();
db.close();
}
public int getofflineCount(){
SQLiteDatabase db=this.getReadableDatabase();
游标c=db.rawQuery(“选择*自”+表名称,空);
返回c.getCount();
}
公共地图getAllOfflineLeave(){
Map params=新的HashMap();
SharedReferences sp_login=context.getSharedReferences(“登录状态”,context.MODE_PRIVATE);
SharedReferences.Editor login\u Editor=sp\u login.edit();
字符串emp_id=sp_login.getString(“userid”,“null”);
SQLiteDatabase db=this.getReadableDatabase();
游标c=db.rawQuery(“从“+表名+”中选择*按“+列ID+”描述限制1”排序,空);
if(c.moveToFirst()){
参数put(“from_date”,c.getString(1));
参数put(“to_date”,c.getString(2));
参数put(“day_count”,c.getString(3));
参数put(“left_type”,c.getString(4));
参数put(“原因”,c.getString(5));
参数put(“emp_id”,emp_id);
}
c、 close();
db.close();
返回参数;
}
公共列表getAllLeave(){
List leaveList=new ArrayList();
SQLiteDatabase db=this.getReadableDatabase();
光标c=db.rawQuery(“选择*离开”,空);
while(c.moveToNext()){
模型日志=新模型();
字符串状态=”;
logs.setFdate(c.getString(0));
logs.setTdate(c.getString(1));
if(c.getString(2).equals(“0”)){
status=“已拒绝”;
}else if(c.getString(2).equals(“2”)){
status=“已批准”;
}否则{
status=“待定”;
}
logs.setLeaveReason(状态);
添加(日志);
}
c、 close();
db.close();
返回离职名单;
}
公共记录(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL(“从休假中删除”);
db.close();
}
public void deleteOfflineRecord(){
SQLiteDatabase db=this.getWritableDatabase();
db.execSQL(“从”+表名称中删除);
db.close();
}
}
脱机工作leave.class
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "my.db";
private static final String TABLE_NAME = "employee_leave";
private static final String COL_ID = "col_id";
private static final String COL_DAYCOUNT = "daycount";
private static final String COL_FROM = "from_date";
private static final String COL_TO = "to_date";
private static final String COL_TYPE = "type";
private static final String COL_REASON = "reason";
Context context;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS leave(date_applied varchar, date_leave varchar, status varchar);");
db.execSQL("CREATE TABLE IF NOT EXISTS " +
TABLE_NAME + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COL_FROM +
" TEXT," + COL_TO + " TEXT," + COL_DAYCOUNT +
" TEXT," + COL_TYPE + " TEXT," +
COL_REASON + " TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//this method will add users in the database
public void insertItem(String from, String to, String status) {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("INSERT INTO leave VALUES ('" + from + "','" + to + "','" + status + "');");
db.close();
}
public void insertItem(String from, String to, String day_count, String leave_type, String reason) {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("INSERT INTO " + TABLE_NAME + " (from_date,to_date,daycount,type,reason)" +
" VALUES ('" + from + "','" + to + "','" + day_count + "','" +
leave_type + "','" + reason + "');");
Toast.makeText(context, "Leave stored on the device", Toast.LENGTH_LONG).show();
db.close();
}
public int getofflineCount() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * from " + TABLE_NAME, null);
return c.getCount();
}
public Map<String, String> getAllOfflineLeave() {
Map<String, String> params = new HashMap<String, String>();
SharedPreferences sp_login = context.getSharedPreferences("login_status", Context.MODE_PRIVATE);
SharedPreferences.Editor login_editor = sp_login.edit();
String emp_id = sp_login.getString("userid", "null");
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * from " + TABLE_NAME + " ORDER BY " + COL_ID + " DESC LIMIT 1", null);
if (c.moveToFirst()) {
params.put("from_date", c.getString(1));
params.put("to_date", c.getString(2));
params.put("day_count", c.getString(3));
params.put("leave_type", c.getString(4));
params.put("reason", c.getString(5));
params.put("emp_id", emp_id);
}
c.close();
db.close();
return params;
}
public List<Model> getAllLeave() {
List<Model> leaveList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * from leave", null);
while (c.moveToNext()) {
Model logs = new Model();
String status = "";
logs.setFdate(c.getString(0));
logs.setTdate(c.getString(1));
if (c.getString(2).equals("0")) {
status = "Rejected";
} else if (c.getString(2).equals("2")) {
status = "Approved";
} else {
status = "Pending";
}
logs.setLeaveReason(status);
leaveList.add(logs);
}
c.close();
db.close();
return leaveList;
}
public void deleteRecord() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE from leave");
db.close();
}
public void deleteOfflineRecord() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE from " + TABLE_NAME);
db.close();
}
public class OfflineWorkerLeave {
Context context;
DatabaseHelper db;
Map<String, String> params;
public OfflineWorkerLeave(Context context, Map<String, String> params) {
this.context = context;
this.params = params;
db = new DatabaseHelper(context);
}
public void updateLeave() {
String url = "exapmle.com/applyleave.php";
StringRequest request = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.contains("1\t")){
Toast.makeText(context, "Successfully data updated", Toast.LENGTH_SHORT).show();
db.deleteOfflineRecord();
} else if (response.contains("0\t")){
Toast.makeText(context, "Something went wrong", Toast.LENGTH_SHORT).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(request);
}
public类脱机工作leave{
语境;
数据库辅助数据库;
映射参数;
public OfflineWorkerLeave(上下文、映射参数){
this.context=上下文;
this.params=params;
db=新数据库助手(上下文);
}
public void updatelave(){
字符串url=“exapmle.com/applyleave.php”;
StringRequest=新的StringRequest(request.Method.POST,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
if(response.contains(“1\t”)){
Toast.makeText(上下文,“成功更新数据”,Toast.LENGTH\u SHORT).sh