Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 第一次呼叫后截击错误的post响应_Php_Android_Android Volley_Offlineapps - Fatal编程技术网

Php 第一次呼叫后截击错误的post响应

Php 第一次呼叫后截击错误的post响应,php,android,android-volley,offlineapps,Php,Android,Android Volley,Offlineapps,我想做的事 我正在尝试在我的应用程序中实现一个简单的离线功能,当设备离线时,员工可以休假,当设备在线时,更新将数据留给服务器的功能,为此我正在执行以下步骤 如果设备脱机,则将数据存储在本地数据库中 通过广播接收器检查连接更改 当设备联机时,通过网络调用将数据发布到web服务器 所有这些都可以正常工作,数据也可以正确地发布到web服务器上,但问题是,它只是第一次发布,之后就不起作用了 到目前为止我对这个问题的了解 每次我进行一次干净的安装时,它都工作得很好,但是当我再次尝试进行另一次网络调用以

我想做的事

我正在尝试在我的应用程序中实现一个简单的离线功能,当设备离线时,员工可以休假,当设备在线时,更新将数据留给服务器的功能,为此我正在执行以下步骤

  • 如果设备脱机,则将数据存储在本地数据库中
  • 通过广播接收器检查连接更改
  • 当设备联机时,通过网络调用将数据发布到web服务器
所有这些都可以正常工作,数据也可以正确地发布到web服务器上,但问题是,它只是第一次发布,之后就不起作用了

到目前为止我对这个问题的了解

每次我进行一次干净的安装时,它都工作得很好,但是当我再次尝试进行另一次网络调用以发布数据时,它就不工作了,相反,截击显示了一个错误的响应代码,这是成功的,但在后端根本没有发布数据

在php后端,echo 1表示成功,0表示失败,但不知道为什么即使数据未发布,volley每次都返回1

leaveFragment

        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