Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

android, eclipse e MySQL - Communications link failure

Discussione in 'Development' iniziata da Gianluigi Capano, 28 Nov 2012.

  1. Gianluigi Capano

    Gianluigi Capano Baby Droid

    Iscritto:
    28 Nov 2012
    Messaggi:
    7
    "Mi Piace":
    0
    salve,
    ho trovato diverse discussioni sull'errore di connessione "Communications link failure", ma non sono riuscito né a risolvere il problema né a chiarirmi le idee!

    il codice che ho scritto (modificando qualche riga di codice trovato su alcuni forum, forse anche questo!) è il seguente:
    Codice:
    package com.example.click;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import org.w3c.dom.Text;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    	
    	private Button closeButton;
    	private EditText testo;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.activity_main);
            
            //this.setContentView(R.layout.layoutxml);
            this.setContentView(R.layout.activity_main);
            this.closeButton = (Button)this.findViewById(R.id.button1);
            this.testo = (EditText)this.findViewById(R.id.editText1);
            this.closeButton.setOnClickListener(new OnClickListener() {
              //@Override
            	public void onClick(View v) {
            		//finish();
        	        Connection conn = null;
         	        String url = "jdbc:mysql://10.0.2.2:3306/miodatabase";
        	        String driver = "com.mysql.jdbc.Driver";
        	        String userName = "root"; 
        	        String password = "root";
        	        try {
           	          Class.forName(driver).newInstance();
       	          
        	          conn = DriverManager.getConnection(url,userName,password);
        	          Toast.makeText(getBaseContext(), "Connected to the database.", Toast.LENGTH_LONG).show();
        	
        	          Statement stmt = conn.createStatement();
        	          ResultSet rs = (ResultSet) stmt.executeQuery("select * from utenti");
        	          String entry = null;
        	          while (rs.next()){
        	              entry = rs.getString(1) + "-" + rs.getString(2) + "-" + rs.getString(3);
        	          }
        	          Toast.makeText(getBaseContext(), entry, Toast.LENGTH_LONG).show();
        	
        	          
        	          conn.close();
        	          Toast.makeText(getBaseContext(), "Disconnected form the database.", Toast.LENGTH_LONG).show();
        	
        	        } catch (Exception e) {
        	        	testo.setText("Exception: " + e.getMessage());
        	                Toast.makeText(getBaseContext(), "Exception: " + e.getMessage() , Toast.LENGTH_LONG).show();
        	          e.printStackTrace();
        	          //editText.setText(e.getMessage() + " " + e.getStackTrace());
        	        }
    
            	}
            });
    	}
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    }
    
    1) con "10.0.2.2:3306" oppure "192.168.1.2:3306" (l'indirizzo di un terzo pc con installato il server MySQL) come indirizzo, anche omettendo il numero di porta, mi restituisce l'eccezione di cui sopra con "The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server". se scrivo "localhost" oppure "localhost:3306", mi restituisce "Exception: could not create connection to database server". vorrei capire cosa sbaglio e se davvero l'emulatore si connette, ma non riceve segnali dal server.
    2) vorrei, se possibile, capire come gestisce le connessioni di rete il so android e come gestirle da codice. cosa bisogna attivare? come bisogna configurare eclipse? Perché non riesco a configurare il wireless (la componente che deve effettuare il collegamento in rete)? Nelle impostazioni, infatti, trovo solo il bluetooth e le reti mobili.

    ovviamente sono ben gradite anche fonti dove posso reperire materiale.

    come device di test utilizzo l'emulatore del SDK android
    SO: Windows 7 64 bit
    Utilizzo Eclipse IDE for Java Developers, versione: Indigo Service Release 2 - Build id: 20120216-1857
    MySQL: 5.5
    connector jar: 5.11

    grazie di cuore :D
     
  2. Gianluigi Capano

    Gianluigi Capano Baby Droid

    Iscritto:
    28 Nov 2012
    Messaggi:
    7
    "Mi Piace":
    0
    salve di nuovo,

    non vorrei contravvenire a qualche regola del forum, ma ho visto che il post ha ricevuto una ventina di visite senza alcuna risposta.

    vorrei chiedere almeno ai moderatori se hanno del materiale che possa aiutarmi o se non hanno nemmeno letto il post.

    grazie
     
  3. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Ciao,

    il post è stato letto. Ciò non vuol dire che ovviamente si abbia una risposta a tutto :)

    Personalmente non ho mai affrontato un problema del genere in android.

    Se puoi, i test falli direttamente su tablet / smart perchè l'emulatore io lo ritengo poco affidabile su alcune cose.

    Magari scopri che è solo un problema di emulatore e il codice che hai funziona.

    Se trovo qualcosa in merito, la posto.

    Ciao!
     
  4. Gianluigi Capano

    Gianluigi Capano Baby Droid

    Iscritto:
    28 Nov 2012
    Messaggi:
    7
    "Mi Piace":
    0
    ciao,
    mi scuso! ho scritto un post inutile, preso dall'ansia!! :)

    sto approntando un pc dove installerò android e che userò come macchina test, proprio perchè ho anch'io il dubbio che dipenda dall'emulatore.

    grazie veramente e se arrivo a qualcosa di buono, vedrò di postarlo comunque.

    ciao a tutti
     
  5. Gianluigi Capano

    Gianluigi Capano Baby Droid

    Iscritto:
    28 Nov 2012
    Messaggi:
    7
    "Mi Piace":
    0
    salve,
    tento di riprendere questa discussione, in quanto ho ripreso il progetto android lasciato allo stato dell'ultimo messaggio.

    sviluppi: ho acquistato un tablet per i test (marca ZERO, economico!), l'ho collegato alla mia LAN wireless dove è collegato anche il server MySQL.
    la stringa di connessione che utilizzo è la seguente: jdbc:mysql://192.168.1.128:3306/nomeDB
    la chiamata a getConnection è questa: conn = DriverManager.getConnection(url,userName,password), dove userName e password sono valorizzate in riferimento a un utente che ha gli opportuni privilegi sul DB.

    risultato: sempre la stessa eccezione!!

    particolare: ho installato qualche app gratuita di client MySQL per android sul tablet ("Cliente MySQL", "Connect to SQL", "MySQL NOW", ...) e si collegano perfettamente con i parametri indicati nella stringa suddetta!

    considerazioni: il problema, secondo me, può essere nella stringa di connessione oppure in qualche "dettaglio" di JDBC, che sembra integrato bene nel sistema!
    sarebbe comodo avere anche solo qualche app che permettesse di visualizzare la stringa di connessione!

    spero di essere stato chiaro, attendo ansioso consigli! :)

    grazie
     
  6. Gianluigi Capano

    Gianluigi Capano Baby Droid

    Iscritto:
    28 Nov 2012
    Messaggi:
    7
    "Mi Piace":
    0
    posto di seguito il contenuto del file AndroidManifest.xml. non vorrei, infatti, che il mio problema fosse riconducibile a qualche permission o simili:
    Codice:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.click"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="15" />
        <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/title_activity_main" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    </manifest>
    attendo eventuali suggerimenti

    grazie ;)
     
  7. Gianluigi Capano

    Gianluigi Capano Baby Droid

    Iscritto:
    28 Nov 2012
    Messaggi:
    7
    "Mi Piace":
    0
    salve,
    problema risolto... DA SOLO! :)
    giorni, settimane, su forum, siti specializzati, amici, parenti, santi, monaci, idoli, totem, ecc... ed era una XXXXXXX (autocensura)!!!
    il problema nasceva dal fatto che c'era un errore nel manifest!
    le righe:

    Codice:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    
    andavano inserite, infatti, subito dopo il primo permission (o comunque all'interno del tag application, credo!):

    Codice:
        <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>
    
    ora il collegamento al db funziona perfettamente! :D
    grazie a tutti ugualmente!