Sto provando a connettere la mia app Android al database MySql (localhost) presente nel mio computer utilizzando il servizio web DOT NET. Sono in grado di connettermi al database online con un solo input (EditText). Qui ci sono 3 parametri di input di EditText e il database è presente solo nel computer. Il webservice riceve i 3 parametri e controlla se i 3 ingressi sono gli stessi del database. Se SÌ, restituisce un valore e se NO restituisce un altro valore. Sto solo cercando di salvare il valore restituito (risposta) a TextView.SocketTimeoutException durante la connessione al database locale
LoginService.asmx
[WebService(Namespace = "Check_Activity")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class LoginService
{
MySqlConnection objCon = new MySqlConnection(ConfigurationManager.ConnectionStrings["ActiveConnection"].ConnectionString);
MySqlCommand objSqlCmd;
MySqlParameter objSqlParam;
[WebMethod]
public string LoginStatus(string uid, string pswrd, string category)
{
string returndata = "";
try
{
if (objCon.State != ConnectionState.Open)
{
objCon.Open();
}
objSqlCmd = new MySqlCommand("rawProcedure", objCon);
objSqlCmd.CommandType = CommandType.StoredProcedure;
objSqlCmd.Parameters.AddWithValue("UID", uid);
objSqlCmd.Parameters.AddWithValue("PASS", pswrd);
objSqlCmd.Parameters.AddWithValue("CAT", category);
objSqlParam = new MySqlParameter();
objSqlParam.ParameterName = "Response";
objSqlParam.MySqlDbType = MySqlDbType.VarChar;
objSqlParam.Direction = ParameterDirection.Output;
objSqlCmd.Parameters.Add(objSqlParam);
objSqlCmd.ExecuteNonQuery();
objCon.Close();
returndata = objSqlParam.Value.ToString();
return returndata; ;
}
catch(Exception ex)
{
return returndata = "Exception";
}
}
}
activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="41dp"
android:hint="User ID"
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editText1"
android:layout_marginTop="50dp"
android:hint="Password"
android:ems="10" />
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editText2"
android:layout_marginTop="64dp"
android:hint="Category"
android:ems="10" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editText3"
android:layout_marginTop="20dp"
android:onClick="RUN"
android:text="Get It !" />
<TextView
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp" />
</RelativeLayout>
MainActivity
public class MainActivity extends Activity {
private static final String SOAP_ACTION = "WSDL_TARGET_NAMESPACE + METHOD";
private static final String OPERATION_NAME = "LoginStatus";// your webservice web method name
private static final String WSDL_TARGET_NAMESPACE = "Check_Activity";
private static final String SOAP_ADDRESS = "http://192.168.1.5:80/LoginService.asmx";
\t private TextView textView;
\t EditText userId, pass, cat;
\t String userId_str, pass_str, cat_str;
\t @Override
\t protected void onCreate(Bundle savedInstanceState) {
\t \t
\t \t if (android.os.Build.VERSION.SDK_INT > 9) {
\t \t StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
\t \t StrictMode.setThreadPolicy(policy);
\t }
\t \t
\t \t super.onCreate(savedInstanceState);
\t \t setContentView(R.layout.activity_main);
\t \t
\t \t textView = (TextView) findViewById(R.id.test);
\t \t
\t \t
\t \t
\t } \t
\t \t
\t \t \t public void RUN(View v){
\t \t
\t \t \t \t SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
PropertyInfo propertyInfo1 = new PropertyInfo();
propertyInfo1.type = PropertyInfo.STRING_CLASS;
propertyInfo1.name = "userId_str";
PropertyInfo propertyInfo2 = new PropertyInfo();
propertyInfo2.type = PropertyInfo.STRING_CLASS;
propertyInfo2.name = "pass_str";
PropertyInfo propertyInfo3 = new PropertyInfo();
propertyInfo3.type = PropertyInfo.STRING_CLASS;
propertyInfo3.name = "cat_str";
userId = (EditText) findViewById(R.id.editText1);
\t \t pass = (EditText) findViewById(R.id.editText2);
\t \t cat = (EditText) findViewById(R.id.editText3);
\t \t userId_str=userId.getText().toString();
\t \t pass_str=pass.getText().toString();
\t \t cat_str=cat.getText().toString();
\t \t //request.addProperty(propertyInfo1, userId_str);
\t \t request.addPropertyIfValue(propertyInfo1, userId_str);
\t \t request.addPropertyIfValue(propertyInfo1, userId_str);
\t \t request.addPropertyIfValue(propertyInfo1, userId_str);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
try {
httpTransport.call(SOAP_ACTION, envelope);
Object response = envelope.getResponse();
textView.setText(response.toString());
} catch (Exception exception) {
\t textView.setText(exception.toString()+" Or Invalid Entry");
}
\t \t \t \t
\t }
}
Il tuo dispositivo è nella rete locale come server? –
Sì, sia il cellulare che il computer hanno la stessa rete WiFi e ho reso il mio Wireless IPv4 statico (come l'indirizzo IP del mio computer). –
Disattiva il firewall. – greenapps