AlertDialog、MySQL 连接和 Android
我有一个关于 Android 和 MySQL 连接中的 AlertDialog 的问题。
在基于上一个问题的mysql连接中。我想在数据库为空或查询结果为空时放置一个AlertDialog,指示信息。这可能吗?
这是我的代码(现在正在工作):
package net.medinfo.movil.prot2;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class Busqueda2 extends Activity
{
AutoCompleteTextView texto;
Button boton;
TextView resultado;
String total;
InputStream is = null;
public void onCreate(Bundle SavedInstanceState)
{
super.onCreate(SavedInstanceState);
setContentView(R.layout.main);
texto = (AutoCompleteTextView) findViewById(R.id.cajaTexto);
String[] meds = getResources().getStringArray(R.array.arreglo_medicamentos);
ArrayAdapter <String> adapter = new ArrayAdapter <String> (this, R.layout.lista_med, meds);
texto.setAdapter(adapter);
boton = (Button) findViewById(R.id.botonBuscar);
resultado = (TextView) findViewById(R.id.resultado);
boton.setOnClickListener (new OnClickListener()
{
@Override
public void onClick(View v)
{
//Se llama el metodo para ejecutar el recibo de datos
resultado.setText(Medicamentos(total));
}
});
}
protected String Medicamentos (String returnString)
{
String txt = texto.getText().toString();
if(!txt.equals(""))
{
String result ="";
//Se envian datos de consulta;
ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
parametros.add(new BasicNameValuePair("name" , txt));
//Conectando a la base de datos
try
{
HttpClient cliente = new DefaultHttpClient();
HttpPost direccion = new HttpPost("http://10.0.2.2/medinfo/conexion.php");
direccion.setEntity(new UrlEncodedFormEntity(parametros));
HttpResponse respuesta = cliente.execute(direccion);
HttpEntity entity = respuesta.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error en la conexion a la base de datos"+e.toString());
Toast.makeText(this, "Error al conectar a la base de datos", Toast.LENGTH_LONG).show();
}
//Transformar respuesta de la conexion en string
try
{
BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String linea = null;
if ((linea = reader.readLine()) != null)
{
sb.append(linea + "\n");
}
is.close();
result = sb.toString();
}
catch(Exception e)
{
Log.e("log_tag", "Error al transformar datos. "+e.toString());
Toast.makeText(this, "Error al transformar datos", Toast.LENGTH_LONG).show();
}
//Recibir datos en formato JSON
try
{
JSONArray jArreglo = new JSONArray(result);
for(int i=0; i<jArreglo.length(); i++)
{
JSONObject json_datos = jArreglo.getJSONObject(i);
Log.i("log_tag", "nombre: "+json_datos.getString("Nombre")+
", cantidad: "+json_datos.getInt("Stock"));
returnString += "\n\t" + jArreglo.getJSONObject(i);
}
}
catch (JSONException e)
{
Log.e("log_tag", "Error al recibir datos"+e.toString());
Toast.makeText(this, "Error al mostrar datos", Toast.LENGTH_LONG).show();
}
}
else Toast.makeText(this, "Escriba un medicamento", Toast.LENGTH_LONG).show();
texto.setText("");
return returnString;
}
}
我感谢所有的帮助。
更新:嗯,现在我正在测试代码,我决定将alerdialog放入JSONException中,到目前为止alertdialog它可以工作,但我的按钮有一些问题。按钮“Ampliar Busqueda”必须调用一个名为“Alternativos”的方法,与 Medicamentos 执行相同操作,但使用另一个查询时,结果必须出现在文本视图“resultado”中,现在我遇到了 java.lang.NullException。我不知道为什么。
这是代码
package net.medinfo.movil.prot2;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class Busqueda2 extends Activity
{
AutoCompleteTextView texto;
Button boton;
TextView resultado;
String total;
String comp;
InputStream is = null;
public void onCreate(Bundle SavedInstanceState)
{
super.onCreate(SavedInstanceState);
setContentView(R.layout.main);
texto = (AutoCompleteTextView) findViewById(R.id.cajaTexto);
String[] meds = getResources().getStringArray(R.array.arreglo_medicamentos);
ArrayAdapter <String> adapter = new ArrayAdapter <String> (this, R.layout.lista_med, meds);
texto.setAdapter(adapter);
boton = (Button) findViewById(R.id.botonBuscar);
resultado = (TextView) findViewById(R.id.resultado);
final AlertDialog.Builder mensaje = new AlertDialog.Builder(this);
mensaje.setTitle("Oops...");
boton.setOnClickListener (new OnClickListener()
{
@Override
public void onClick(View v)
{
//Se llama el metodo para ejecutar el recibo de datos
resultado.setText(Medicamentos(total));
while (resultado.equals(""))
{
resultado.setText(total);
}
}
});
}
protected String Medicamentos (String returnString)
{
String txt = texto.getText().toString();
if(!txt.equals(""))
{
String result ="";
//Se envian datos de consulta;
ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
parametros.add(new BasicNameValuePair("name" , txt));
//Conectando a la base de datos
try
{
HttpClient cliente = new DefaultHttpClient();
HttpPost direccion = new HttpPost("http://10.0.2.2/medinfo/conexion.php");
direccion.setEntity(new UrlEncodedFormEntity(parametros));
HttpResponse respuesta = cliente.execute(direccion);
HttpEntity entity = respuesta.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error en la conexion a la base de datos"+e.toString());
Toast.makeText(this, "Error al conectar a la base de datos", Toast.LENGTH_LONG).show();
}
//Transformar respuesta de la conexion en string
try
{
BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String linea = null;
if ((linea = reader.readLine()) != null)
{
sb.append(linea + "\n");
}
is.close();
result = sb.toString();
}
catch(Exception e)
{
Log.e("log_tag", "Error al transformar datos. "+e.toString());
Toast.makeText(this, "Error al transformar datos", Toast.LENGTH_LONG).show();
}
//Recibir datos en formato JSON
try
{
JSONArray jArreglo = new JSONArray(result);
for(int i=0; i<jArreglo.length(); i++)
{
JSONObject json_datos = jArreglo.getJSONObject(i);
Log.i("log_tag", "nombre: "+json_datos.getString("Nombre")+
", cantidad: "+json_datos.getInt("Stock"));
returnString += "\n\t" + jArreglo.getJSONObject(i);
comp = json_datos.getString("componentes");
}
}
catch (JSONException e)
{
Log.e("log_tag", "Error al recibir datos"+e.toString());
Toast.makeText(this, "Error al mostrar datos", Toast.LENGTH_LONG).show();
AlertDialog.Builder mensaje = new AlertDialog.Builder(this);
mensaje.setTitle("Oops...");
mensaje.setMessage("El medicamento se encuentra sin stock");
mensaje.setPositiveButton("Ampliar Busqueda", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
resultado.setText(Alternativos(total));
}
});
mensaje.setNegativeButton("Reintentar", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.cancel();
}
});
mensaje.show();
}
}
else Toast.makeText(this, "Escriba un medicamento", Toast.LENGTH_LONG).show();
return returnString;
}
protected String Alternativos (String returnString)
{
String result = "";
//Se envian datos de consulta;
ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
parametros.add(new BasicNameValuePair("componente" , comp.trim()));
//Conectando a la base de datos
try
{
HttpClient cliente = new DefaultHttpClient();
HttpPost direccion = new HttpPost("http://10.0.2.2/medinfo/conexionalt.php");
direccion.setEntity(new UrlEncodedFormEntity(parametros));
HttpResponse respuesta = cliente.execute(direccion);
HttpEntity entity = respuesta.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error en la conexion a la base de datos"+e.toString());
Toast.makeText(this, "Error al conectar a la base de datos", Toast.LENGTH_LONG).show();
}
//Transformar respuesta de la conexion en string
try
{
BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String linea = null;
if ((linea = reader.readLine()) != null)
{
sb.append(linea + "\n");
}
is.close();
result = sb.toString();
}
catch(Exception e)
{
Log.e("log_tag", "Error al transformar datos. "+e.toString());
Toast.makeText(this, "Error al transformar datos", Toast.LENGTH_LONG).show();
}
//Recibir datos en formato JSON
try
{
JSONArray jArreglo = new JSONArray(result);
for(int i=0; i<jArreglo.length(); i++)
{
JSONObject json_datos = jArreglo.getJSONObject(i);
Log.i("log_tag", "nombre: "+json_datos.getString("Nombre")+
", cantidad: "+json_datos.getInt("Stock"));
returnString += "\n\t" + jArreglo.getJSONObject(i);
}
}
catch (JSONException e)
{
Log.e("log_tag", "Error al recibir datos"+e.toString());
Toast.makeText(this, "Error al mostrar datos", Toast.LENGTH_LONG).show();
}
return returnString;
}
}
感谢您的帮助。
更新2:php代码是:
<?php
mysql_connect("localhost","root","123456");
mysql_select_db("medinfo_movil");
$query=mysql_query("SELECT Nombre, Componentes, Stock FROM medicamento WHERE componentes like
'".$_REQUEST['componente']."%' and Stock > 0");
while($row=mysql_fetch_assoc($query))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
I have a question about AlertDialog in Android and MySQL connection.
In the mysql connection based in the last question. I wanna put an AlertDialog when the database is empty, or the query result empty, indicating the info. Is this possible?
There is my code (now working):
package net.medinfo.movil.prot2;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class Busqueda2 extends Activity
{
AutoCompleteTextView texto;
Button boton;
TextView resultado;
String total;
InputStream is = null;
public void onCreate(Bundle SavedInstanceState)
{
super.onCreate(SavedInstanceState);
setContentView(R.layout.main);
texto = (AutoCompleteTextView) findViewById(R.id.cajaTexto);
String[] meds = getResources().getStringArray(R.array.arreglo_medicamentos);
ArrayAdapter <String> adapter = new ArrayAdapter <String> (this, R.layout.lista_med, meds);
texto.setAdapter(adapter);
boton = (Button) findViewById(R.id.botonBuscar);
resultado = (TextView) findViewById(R.id.resultado);
boton.setOnClickListener (new OnClickListener()
{
@Override
public void onClick(View v)
{
//Se llama el metodo para ejecutar el recibo de datos
resultado.setText(Medicamentos(total));
}
});
}
protected String Medicamentos (String returnString)
{
String txt = texto.getText().toString();
if(!txt.equals(""))
{
String result ="";
//Se envian datos de consulta;
ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
parametros.add(new BasicNameValuePair("name" , txt));
//Conectando a la base de datos
try
{
HttpClient cliente = new DefaultHttpClient();
HttpPost direccion = new HttpPost("http://10.0.2.2/medinfo/conexion.php");
direccion.setEntity(new UrlEncodedFormEntity(parametros));
HttpResponse respuesta = cliente.execute(direccion);
HttpEntity entity = respuesta.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error en la conexion a la base de datos"+e.toString());
Toast.makeText(this, "Error al conectar a la base de datos", Toast.LENGTH_LONG).show();
}
//Transformar respuesta de la conexion en string
try
{
BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String linea = null;
if ((linea = reader.readLine()) != null)
{
sb.append(linea + "\n");
}
is.close();
result = sb.toString();
}
catch(Exception e)
{
Log.e("log_tag", "Error al transformar datos. "+e.toString());
Toast.makeText(this, "Error al transformar datos", Toast.LENGTH_LONG).show();
}
//Recibir datos en formato JSON
try
{
JSONArray jArreglo = new JSONArray(result);
for(int i=0; i<jArreglo.length(); i++)
{
JSONObject json_datos = jArreglo.getJSONObject(i);
Log.i("log_tag", "nombre: "+json_datos.getString("Nombre")+
", cantidad: "+json_datos.getInt("Stock"));
returnString += "\n\t" + jArreglo.getJSONObject(i);
}
}
catch (JSONException e)
{
Log.e("log_tag", "Error al recibir datos"+e.toString());
Toast.makeText(this, "Error al mostrar datos", Toast.LENGTH_LONG).show();
}
}
else Toast.makeText(this, "Escriba un medicamento", Toast.LENGTH_LONG).show();
texto.setText("");
return returnString;
}
}
I appreciate all the help.
UPDATED: Well, now im testing the code, and i decide to put the alerdialog in the JSONexception, until now the alertdialog it works but i have some problem with a button. the button "Ampliar Busqueda" must call a method called "Alternativos" when do the sames as Medicamentos but with another query, the result must be appear in the textview "resultado", now im having a java.lang.NullException. i don't know why.
This is the code
package net.medinfo.movil.prot2;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class Busqueda2 extends Activity
{
AutoCompleteTextView texto;
Button boton;
TextView resultado;
String total;
String comp;
InputStream is = null;
public void onCreate(Bundle SavedInstanceState)
{
super.onCreate(SavedInstanceState);
setContentView(R.layout.main);
texto = (AutoCompleteTextView) findViewById(R.id.cajaTexto);
String[] meds = getResources().getStringArray(R.array.arreglo_medicamentos);
ArrayAdapter <String> adapter = new ArrayAdapter <String> (this, R.layout.lista_med, meds);
texto.setAdapter(adapter);
boton = (Button) findViewById(R.id.botonBuscar);
resultado = (TextView) findViewById(R.id.resultado);
final AlertDialog.Builder mensaje = new AlertDialog.Builder(this);
mensaje.setTitle("Oops...");
boton.setOnClickListener (new OnClickListener()
{
@Override
public void onClick(View v)
{
//Se llama el metodo para ejecutar el recibo de datos
resultado.setText(Medicamentos(total));
while (resultado.equals(""))
{
resultado.setText(total);
}
}
});
}
protected String Medicamentos (String returnString)
{
String txt = texto.getText().toString();
if(!txt.equals(""))
{
String result ="";
//Se envian datos de consulta;
ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
parametros.add(new BasicNameValuePair("name" , txt));
//Conectando a la base de datos
try
{
HttpClient cliente = new DefaultHttpClient();
HttpPost direccion = new HttpPost("http://10.0.2.2/medinfo/conexion.php");
direccion.setEntity(new UrlEncodedFormEntity(parametros));
HttpResponse respuesta = cliente.execute(direccion);
HttpEntity entity = respuesta.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error en la conexion a la base de datos"+e.toString());
Toast.makeText(this, "Error al conectar a la base de datos", Toast.LENGTH_LONG).show();
}
//Transformar respuesta de la conexion en string
try
{
BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String linea = null;
if ((linea = reader.readLine()) != null)
{
sb.append(linea + "\n");
}
is.close();
result = sb.toString();
}
catch(Exception e)
{
Log.e("log_tag", "Error al transformar datos. "+e.toString());
Toast.makeText(this, "Error al transformar datos", Toast.LENGTH_LONG).show();
}
//Recibir datos en formato JSON
try
{
JSONArray jArreglo = new JSONArray(result);
for(int i=0; i<jArreglo.length(); i++)
{
JSONObject json_datos = jArreglo.getJSONObject(i);
Log.i("log_tag", "nombre: "+json_datos.getString("Nombre")+
", cantidad: "+json_datos.getInt("Stock"));
returnString += "\n\t" + jArreglo.getJSONObject(i);
comp = json_datos.getString("componentes");
}
}
catch (JSONException e)
{
Log.e("log_tag", "Error al recibir datos"+e.toString());
Toast.makeText(this, "Error al mostrar datos", Toast.LENGTH_LONG).show();
AlertDialog.Builder mensaje = new AlertDialog.Builder(this);
mensaje.setTitle("Oops...");
mensaje.setMessage("El medicamento se encuentra sin stock");
mensaje.setPositiveButton("Ampliar Busqueda", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
resultado.setText(Alternativos(total));
}
});
mensaje.setNegativeButton("Reintentar", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.cancel();
}
});
mensaje.show();
}
}
else Toast.makeText(this, "Escriba un medicamento", Toast.LENGTH_LONG).show();
return returnString;
}
protected String Alternativos (String returnString)
{
String result = "";
//Se envian datos de consulta;
ArrayList<NameValuePair> parametros = new ArrayList<NameValuePair>();
parametros.add(new BasicNameValuePair("componente" , comp.trim()));
//Conectando a la base de datos
try
{
HttpClient cliente = new DefaultHttpClient();
HttpPost direccion = new HttpPost("http://10.0.2.2/medinfo/conexionalt.php");
direccion.setEntity(new UrlEncodedFormEntity(parametros));
HttpResponse respuesta = cliente.execute(direccion);
HttpEntity entity = respuesta.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error en la conexion a la base de datos"+e.toString());
Toast.makeText(this, "Error al conectar a la base de datos", Toast.LENGTH_LONG).show();
}
//Transformar respuesta de la conexion en string
try
{
BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String linea = null;
if ((linea = reader.readLine()) != null)
{
sb.append(linea + "\n");
}
is.close();
result = sb.toString();
}
catch(Exception e)
{
Log.e("log_tag", "Error al transformar datos. "+e.toString());
Toast.makeText(this, "Error al transformar datos", Toast.LENGTH_LONG).show();
}
//Recibir datos en formato JSON
try
{
JSONArray jArreglo = new JSONArray(result);
for(int i=0; i<jArreglo.length(); i++)
{
JSONObject json_datos = jArreglo.getJSONObject(i);
Log.i("log_tag", "nombre: "+json_datos.getString("Nombre")+
", cantidad: "+json_datos.getInt("Stock"));
returnString += "\n\t" + jArreglo.getJSONObject(i);
}
}
catch (JSONException e)
{
Log.e("log_tag", "Error al recibir datos"+e.toString());
Toast.makeText(this, "Error al mostrar datos", Toast.LENGTH_LONG).show();
}
return returnString;
}
}
Thanks for your help.
UPDATE 2: The php code is:
<?php
mysql_connect("localhost","root","123456");
mysql_select_db("medinfo_movil");
$query=mysql_query("SELECT Nombre, Componentes, Stock FROM medicamento WHERE componentes like
'".$_REQUEST['componente']."%' and Stock > 0");
while($row=mysql_fetch_assoc($query))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我可以想出一些方法来测试:
如果 JSONObject 为空/null,则查询从数据库返回 0 行。首先尝试在 php 代码中输出查询的零行结果。根据这些 PHP 结果编写测试。您还可以检查
respuesta
响应中是否包含您的查询结果。http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r1mx/index.jsp?topic=/com.ibm.wbit.610.help.config.doc/topics/rjsonnullunsempprops.html
这里有关于空和 null JSON 对象的更多信息。
编辑:
键和值的组合。
I can think of ways to test:
If the JSONObject is empty/null then the query returned 0-rows from your database. First of all try outputing zero-row result from your query in your php code. Write test based on these PHP results. Also you can check in the
respuesta
if the response contains result from your query.http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r1mx/index.jsp?topic=/com.ibm.wbit.610.help.config.doc/topics/rjsonnullunsempprops.html
Here there is more info about empty and null JSON objects.
Edit:
Combination of key and value.