Autore Topic: Connessione a un database remoto contenuto in un pc,attraverso app android!!  (Letto 1419 volte)

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Ciao a tutti, ho un problema con la mia app! In poche parole il mio  codice  serve per connettersi ad un database remoto, attraverso un login con utente e password. Sull'emulatore del computer funziona perfettamente sul telefono no!! Dovrei utilizzare un asynctask per risolvere il problema(molti mid icono che possa fare al caso mio)???Oppure è un problema di indirizzi ip?? in teoria io dovrei connettermi al database contenuto nel mio pc(uso wamp oper simulare il server) attraverso il mio telefono!! Non capisco perche non funziona, il telefono e il pc si trovano sulla stessa rete!!! qualcuno ha qualche idea??
Codice (Java): [Seleziona]
package com.example.tesi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
       
         EditText username1;
         EditText password1;
         TextView status;
        private static final String url = "jdbc:mysql://10.0.2.2:3306/tesina";// questo url lo utilizzo sull'emulatore
        private static final String url = "jdbc:mysql://192.168.1.10:3306/tesina";// questo url lo utilizzo sul mio s2
    private static final String user = "root";
    private static final String pass = "";
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        username1 = (EditText) findViewById(R.id.user);
        password1 = (EditText) findViewById(R.id.pass);
        status =(TextView) findViewById(R.id.login_error);
        Button btnLogin=(Button) findViewById(R.id.btnlogin);
         btnLogin.setOnClickListener(new View.OnClickListener() {
                 
             public void onClick(View view) {
                testDB();
           
             }
         });
    }

    public void testDB() {
        String us = username1.getText().toString();
        String p = password1.getText().toString();
   
       
       
        try {
               
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, pass);
            Statement stmt = con.createStatement();
           ResultSet rs = (ResultSet) stmt.executeQuery("SELECT * FROM prova WHERE nome='"+us+"'");
           
           if(rs.next())
           {
               String dbpass = rs.getString(2);
               if(dbpass.equals(p))
               {
                 
                   Intent i = new Intent(this,classi.class);
                   i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                   startActivity(i);
               }
           else
           {
                   Toast.makeText(getBaseContext(), "errore: password non inserita correttamente", Toast.LENGTH_LONG).show();
           }
          }
           else
           {
                   Toast.makeText(getBaseContext(), "errore:username non trovato", Toast.LENGTH_LONG).show();
           }
         
        }
        catch(Exception e) {
            e.printStackTrace();
            Toast.makeText(getBaseContext(), "applicazione non collegata al database della scuola", Toast.LENGTH_LONG).show();
        }  

    }
}

Quasi dimenticavo, il logcat
Codice: [Seleziona]
05-05 12:02:04.288: W/System.err(18271): java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: android.os.NetworkOnMainThreadException
05-05 12:02:04.288: W/System.err(18271): ** BEGIN NESTED EXCEPTION **
05-05 12:02:04.288: W/System.err(18271): java.net.SocketException
05-05 12:02:04.288: W/System.err(18271): MESSAGE: android.os.NetworkOnMainThreadException
05-05 12:02:04.288: W/System.err(18271): STACKTRACE:
05-05 12:02:04.288: W/System.err(18271): java.net.SocketException: android.os.NetworkOnMainThreadException
05-05 12:02:04.288: W/System.err(18271):         at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143)
05-05 12:02:04.288: W/System.err(18271):         at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225)
05-05 12:02:04.288: W/System.err(18271):         at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805)
05-05 12:02:04.288: W/System.err(18271):         at com.mysql.jdbc.Connection.<init>(Connection.java:452)
05-05 12:02:04.288: W/System.err(18271):         at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
05-05 12:02:04.288: W/System.err(18271):         at java.sql.DriverManager.getConnection(DriverManager.java:175)
05-05 12:02:04.288: W/System.err(18271):         at java.sql.DriverManager.getConnection(DriverManager.java:209)
05-05 12:02:04.288: W/System.err(18271):         at com.example.tesi.MainActivity.testDB(MainActivity.java:54)
05-05 12:02:04.288: W/System.err(18271):         at com.example.tesi.MainActivity$1.onClick(MainActivity.java:39)
05-05 12:02:04.288: W/System.err(18271):         at android.view.View.performClick(View.java:4232)
05-05 12:02:04.288: W/System.err(18271):         at android.view.View$PerformClick.run(View.java:17298)
05-05 12:02:04.288: W/System.err(18271):         at android.os.Handler.handleCallback(Handler.java:615)
05-05 12:02:04.288: W/System.err(18271):         at android.os.Handler.dispatchMessage(Handler.java:92)
05-05 12:02:04.288: W/System.err(18271):         at android.os.Looper.loop(Looper.java:137)
05-05 12:02:04.288: W/System.err(18271):         at android.app.ActivityThread.main(ActivityThread.java:4921)
05-05 12:02:04.288: W/System.err(18271):         at java.lang.reflect.Method.invokeNative(Native Method)
05-05 12:02:04.288: W/System.err(18271):         at java.lang.reflect.Method.invoke(Method.java:511)
05-05 12:02:04.288: W/System.err(18271):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
05-05 12:02:04.288: W/System.err(18271):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
05-05 12:02:04.288: W/System.err(18271):         at dalvik.system.NativeStart.main(Native Method)
05-05 12:02:04.288: W/System.err(18271): ** END NESTED EXCEPTION **
05-05 12:02:04.293: W/System.err(18271):         at com.mysql.jdbc.Connection.createNewIO(Connection.java:1875)
05-05 12:02:04.293: W/System.err(18271):         at com.mysql.jdbc.Connection.<init>(Connection.java:452)
05-05 12:02:04.293: W/System.err(18271):         at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
05-05 12:02:04.293: W/System.err(18271):         at java.sql.DriverManager.getConnection(DriverManager.java:175)
05-05 12:02:04.293: W/System.err(18271):         at java.sql.DriverManager.getConnection(DriverManager.java:209)
05-05 12:02:04.293: W/System.err(18271):         at com.example.tesi.MainActivity.testDB(MainActivity.java:54)
05-05 12:02:04.293: W/System.err(18271):         at com.example.tesi.MainActivity$1.onClick(MainActivity.java:39)
05-05 12:02:04.313: D/dalvikvm(18271): GC_CONCURRENT freed 163K, 14% free 9694K/11143K, paused 14ms+4ms, total 55ms
05-05 12:02:04.313: D/dalvikvm(18271): WAIT_FOR_CONCURRENT_GC blocked 21ms
05-05 12:02:04.313: W/System.err(18271):         at android.view.View.performClick(View.java:4232)
05-05 12:02:04.313: W/System.err(18271):         at android.view.View$PerformClick.run(View.java:17298)
05-05 12:02:04.313: W/System.err(18271):         at android.os.Handler.handleCallback(Handler.java:615)
05-05 12:02:04.313: W/System.err(18271):         at android.os.Handler.dispatchMessage(Handler.java:92)
05-05 12:02:04.313: W/System.err(18271):         at android.os.Looper.loop(Looper.java:137)
05-05 12:02:04.313: W/System.err(18271):         at android.app.ActivityThread.main(ActivityThread.java:4921)
05-05 12:02:04.318: W/System.err(18271):         at java.lang.reflect.Method.invokeNative(Native Method)
05-05 12:02:04.318: W/System.err(18271):         at java.lang.reflect.Method.invoke(Method.java:511)
05-05 12:02:04.318: W/System.err(18271):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
05-05 12:02:04.318: W/System.err(18271):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
05-05 12:02:04.318: W/System.err(18271):         at dalvik.system.NativeStart.main(Native Method)

« Ultima modifica: 05 Maggio 2013, 12:05:06 CEST da alex93 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Connessione a un database remoto contenuto in un pc,attraverso app android!!
« Risposta #1 il: 05 Maggio 2013, 12:07:22 CEST »
0
In questi casi si prende l'eccezione (android.os.NetworkOnMainThreadException) e si cerca sul forum o si cerca su google come risolverla. Ci sono milioni di risposte a riguardo.

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Connessione a un database remoto contenuto in un pc,attraverso app android!!
« Risposta #2 il: 05 Maggio 2013, 12:33:44 CEST »
0
ok, però vorrei capire perchè l'emulatore non da errori invece il telefono si??

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Connessione a un database remoto contenuto in un pc,attraverso app android!!
« Risposta #3 il: 05 Maggio 2013, 12:35:38 CEST »
0
ok, però vorrei capire perchè l'emulatore non da errori invece il telefono si??

Probabilmente è un emulatore di una versione android 2.x, quando la connessione di rete nel main thread era comunque un errore concettuale, ma non c'era ancora la segnalazione del logcat.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Connessione a un database remoto contenuto in un pc,attraverso app android!!
« Risposta #4 il: 05 Maggio 2013, 12:47:55 CEST »
0
grazie non mi da piu quel errore adesso ne ho trovato uno nuovo!!
« Ultima modifica: 05 Maggio 2013, 15:58:08 CEST da alex93 »