我想在我的Android应用程序中从Sqlserver获取数据。
首先,我将我的应用程序与C#中的Web服务构建连接起来就像这样。
public class DataHelper
{
public static Cliente[] ListadoClientes()
{
DataSet dst = new DataSet();
string instrumentos = "";
/*try
{*/
var connectionString = ConfigurationManager.ConnectionStrings["TestAndroid"].ConnectionString;
//Create string connections
SqlConnection con = new SqlConnection(connectionString);
//open connections
con.Open();
/* if (con != null)
{*/
//Query to database
SqlCommand cmd = new SqlCommand("select clrut,Clnombre,Clcodigo from parametros..CLIENTE", con);
SqlDataReader dr = cmd.ExecuteReader();
List<Cliente> lista = new List<Cliente>();
while (dr.Read())
{
lista.Add(new Cliente(dr.GetDecimal(0),
dr.GetString(1),
dr.GetDecimal(2)));
}
// dr.Close();
con.Close();
return lista.ToArray();
}
该代码是副服务器,我正在捕获android上的数据。
//Tarea Asíncrona para llamar al WS de consulta en segundo plano
private class TareaWSConsulta extends AsyncTask<String,Integer,Boolean> {
private Cliente[] listaClientes;
protected Boolean doInBackground(String... params) {
boolean resul = true;
final String NAMESPACE = "http://xxxx.net";
final String URL="http://iplocaliis/ServicioClientes.asmx";
final String METHOD_NAME = "metodoCliente";
final String SOAP_ACTION ="http://xxxxxx/ListadoClientes";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE transporte = new HttpTransportSE(URL);
try
{
transporte.call(SOAP_ACTION, envelope);
SoapObject resSoap =(SoapObject)envelope.getResponse();
listaClientes = new Cliente[resSoap.getPropertyCount()];
for (int i = 0; i < listaClientes.length; i++)
{
SoapObject ic = (SoapObject)resSoap.getProperty(i);
Cliente cli = new Cliente();
cli.id = Integer.parseInt(ic.getProperty(0).toString());
cli.nombre = ic.getProperty(1).toString();
cli.telefono = Integer.parseInt(ic.getProperty(2).toString());
listaClientes[i] = cli;
}
}
catch (Exception e)
{
resul = false;
}
return resul;
}
protected void onPostExecute(Boolean result) {
if (result)
{
//Rellenamos la lista con los nombres de los clientes
final String[] datos = new String[listaClientes.length];
for(int i=0; i<listaClientes.length; i++)
datos[i] = listaClientes[i].nombre;
ArrayAdapter<String> adaptador =
new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, datos);
lstClientes.setAdapter(adaptador);
}
else
{
txtResultado.setText("Error!");
}
}
}
它可以很好地使用Wifi,但当我将连接更改为3g时,它无法正常工作。
Web服务在本地IIS中发布。
答案 0 :(得分:1)
这是一个网络问题,除非您配置路由器,否则无法从公共IP地址访问本地Web服务。
答案 1 :(得分:0)
您的代码没有问题,这是网络问题。
<强> 1。为什么它与Wifi连接有效?
当您的服务器和手机都连接到同一个WLAN时,它们都在本地网络中,因此您的应用可以访问服务器。
<强> 2。为什么不用3G网络?
手机连接3G网络后,手机和服务器不在同一网络中。此外,您的服务器IP不是公共IP,因此您的应用无法访问您的服务器。
第3。如何使服务器可访问