Search code examples
phpandroidandroid-asynctaskandroid-sqliteandroid-broadcastreceiver

Delete SQLite data rows after uploading to server?


I have a BroadCastReceiver which checks if internet (3g or wifi) is available and then run AsyncTask class which fetch SQLite database data row by row and after making connection with server, upload one row to server database and then delete that row.

Problem is after uploading row data, when i try to check server PHP response which should be true, it does not enter into if statement. In debugging it shows it is true but it does not execute delete row function. What is wrong here? This is broadcast receiver code. If you need more code just tell me.

package com.murtaza.homeforourownapp.quickhomeserviceapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
* Created by Rashid Faheem on 7/18/2017.
*/

public class AutoDataSending extends BroadcastReceiver {
Sqlite_database db;

@Override
public void onReceive(Context context, Intent intent) {

    db = new Sqlite_database(context);
    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();

    if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
        int rows = db.getjobsCount();
        if (rows > 0) {
            Toast.makeText(context, "Auto Sending " + rows + "data rows to server...", Toast.LENGTH_SHORT).show();
            new sendData().execute();
        }


    }
  }


private class sendData extends AsyncTask<String, String, String> {

    URL url;
    HttpURLConnection conn;

    @Override
    protected String doInBackground(String... params) {

        try {

            // Enter URL address where your php file resides
            url = new URL("http://192.168.8.100/project/get_jobs.php");

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "exception";
        }
        try {
            int jobcount = db.getjobsCount();
            data2 data = new data2();
            if (jobcount > 0) {

                //For loop to upload single record and delete it from sqlite database
            for (int i = 0; i<jobcount; i++){
                data = db.getsinglejob();
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(20000);
                conn.setConnectTimeout(15000);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                Uri.Builder builder = new Uri.Builder()
                        .appendQueryParameter("name", data.name)
                        .appendQueryParameter("email", data.email)
                        .appendQueryParameter("cellno", data.cellno)
                        .appendQueryParameter("password", data.password)
                        .appendQueryParameter("address", data.address)
                        .appendQueryParameter("date", data.date)
                        .appendQueryParameter("servicetype", data.servicetype)
                        .appendQueryParameter("experience", data.experience)
                        .appendQueryParameter("qualification", data.qualification)
                        .appendQueryParameter("image", data.imgurl);
                String query = builder.build().getEncodedQuery();
                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
                writer.write(query);
                writer.flush();
                writer.close();
                os.close();
                conn.connect();
                int response = conn.getResponseCode();
                if (response == conn.HTTP_OK) {
                    InputStream input = conn.getInputStream();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                    String res = new String();
                    String line=null;
                    while ((line = reader.readLine()) != null) {
                        res = res + line;
                    }
                    if (res == "true")              //in debug it shows that res variable value is true
                        db.deleteSinglejob(); //this line does not executes and it return to for loop begining
                }
            }


            }
        } catch (IOException e1) {
            e1.printStackTrace();
            return "exception";
        } catch (Exception e2) {
            e2.printStackTrace();
        }
        return  null;
    }


}
}

Solution

  • Strings must be checked with equals method. Check here: enter link description here

    if (res.equals("true"))