上传到服务器后删除 SQLite 数据行?
Delete SQLite data rows after uploading to server?
我有一个 BroadCastReceiver 检查互联网(3g 或 wifi)是否可用,然后 运行 AsyncTask class 逐行获取 SQLite 数据库数据并在与服务器建立连接后上传一个行到服务器数据库,然后删除该行。
问题是在上传行数据之后,当我尝试检查服务器 PHP 应该为真的响应时,它没有进入 if 语句。在调试中它显示它是真的但它不执行删除行功能。这里有什么问题?
这是广播接收器代码。如果您需要更多代码,请告诉我。
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;
}
}
}
必须使用 equals 方法检查字符串。在这里查看:enter link description here
if (res.equals("true"))
我有一个 BroadCastReceiver 检查互联网(3g 或 wifi)是否可用,然后 运行 AsyncTask class 逐行获取 SQLite 数据库数据并在与服务器建立连接后上传一个行到服务器数据库,然后删除该行。
问题是在上传行数据之后,当我尝试检查服务器 PHP 应该为真的响应时,它没有进入 if 语句。在调试中它显示它是真的但它不执行删除行功能。这里有什么问题? 这是广播接收器代码。如果您需要更多代码,请告诉我。
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;
}
}
}
必须使用 equals 方法检查字符串。在这里查看:enter link description here
if (res.equals("true"))