Autore Topic: Errori inputconnection:connessione galaxy s2 con android 4.1.2 al db remoto  (Letto 668 volte)

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Incredibilmente ho finito la mia tesina( programma per segnare le assenza a scuola). Ho utilizzato l'asynctask quindi non mi dovrebbe dare piu errori su i nuovi dispositivi android( infatti sull'emulatore 4.1.2 funziona tutto alla perfezione). Adesso mi chiedo, perche quando lo eseguo dal telefono non mi funziona?? mi da questi errori:

Codice: [Seleziona]
05-06 14:38:58.223: W/IInputConnectionWrapper(20002): getSelectedText on inactive InputConnection
05-06 14:38:58.223: W/IInputConnectionWrapper(20002): setComposingText on inactive InputConnection
05-06 14:38:58.293: W/IInputConnectionWrapper(20002): getExtractedText on inactive InputConnection

Nel manifest credo di avere tutto in regola( wi-fi è abilitato, internet pure)

Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
 <uses-permission android:required="true" android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

codice di connessione al db remoto
Codice (Java): [Seleziona]
private static final String url = "jdbc:mysql://192.168.1.10:3306/tesina";// potrebbe essere qui l'errore ip sbagliato e porta non funzionante??
    private static final String user = "root";
    private static final String pass = "";

Post unito: 06 Maggio 2013, 14:55:37 CEST
dopo un po che l'app non va, crash e da questo errore

Codice: [Seleziona]
05-06 14:48:30.043: W/IInputConnectionWrapper(20002): showStatusIcon on inactive InputConnection
05-06 14:51:30.488: W/System.err(20002): java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: java.net.ConnectException: failed to connect to /192.168.1.10 (port 3306): connect failed: ETIMEDOUT (Connection timed out)
05-06 14:51:30.493: W/System.err(20002): ** BEGIN NESTED EXCEPTION **
05-06 14:51:30.498: W/System.err(20002): java.net.SocketException
05-06 14:51:30.498: W/System.err(20002): MESSAGE: java.net.ConnectException: failed to connect to /192.168.1.10 (port 3306): connect failed: ETIMEDOUT (Connection timed out)
05-06 14:51:30.498: W/System.err(20002): STACKTRACE:
05-06 14:51:30.503: W/System.err(20002): java.net.SocketException: java.net.ConnectException: failed to connect to /192.168.1.10 (port 3306): connect failed: ETIMEDOUT (Connection timed out)
05-06 14:51:30.503: W/System.err(20002):         at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143)
05-06 14:51:30.503: W/System.err(20002):         at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225)
05-06 14:51:30.503: W/System.err(20002):         at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805)
05-06 14:51:30.503: W/System.err(20002):         at com.mysql.jdbc.Connection.<init>(Connection.java:452)
05-06 14:51:30.503: W/System.err(20002):         at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
05-06 14:51:30.503: W/System.err(20002):         at java.sql.DriverManager.getConnection(DriverManager.java:175)
05-06 14:51:30.508: W/System.err(20002):         at java.sql.DriverManager.getConnection(DriverManager.java:209)
05-06 14:51:30.508: W/System.err(20002):         at com.example.tesi.MainActivity$Connessione.doInBackground(MainActivity.java:64)
05-06 14:51:30.508: W/System.err(20002):         at com.example.tesi.MainActivity$Connessione.doInBackground(MainActivity.java:1)
05-06 14:51:30.508: W/System.err(20002):         at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-06 14:51:30.508: W/System.err(20002):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-06 14:51:30.508: W/System.err(20002):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-06 14:51:30.508: W/System.err(20002):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-06 14:51:30.508: W/System.err(20002):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-06 14:51:30.513: W/System.err(20002):         at java.lang.Thread.run(Thread.java:856)
05-06 14:51:30.513: W/System.err(20002): ** END NESTED EXCEPTION **
05-06 14:51:30.523: W/System.err(20002):         at com.mysql.jdbc.Connection.createNewIO(Connection.java:1875)
05-06 14:51:30.523: W/System.err(20002):         at com.mysql.jdbc.Connection.<init>(Connection.java:452)
05-06 14:51:30.523: W/System.err(20002):         at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
05-06 14:51:30.528: W/System.err(20002):         at java.sql.DriverManager.getConnection(DriverManager.java:175)
05-06 14:51:30.533: W/System.err(20002):         at java.sql.DriverManager.getConnection(DriverManager.java:209)
05-06 14:51:30.533: W/System.err(20002):         at com.example.tesi.MainActivity$Connessione.doInBackground(MainActivity.java:64)
05-06 14:51:30.538: W/System.err(20002):         at com.example.tesi.MainActivity$Connessione.doInBackground(MainActivity.java:1)
05-06 14:51:30.538: W/System.err(20002):         at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-06 14:51:30.543: W/System.err(20002):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-06 14:51:30.543: W/System.err(20002):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-06 14:51:30.543: W/System.err(20002):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-06 14:51:30.548: W/System.err(20002):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-06 14:51:30.553: W/System.err(20002):         at java.lang.Thread.run(Thread.java:856)
05-06 14:51:30.553: W/dalvikvm(20002): threadid=13: thread exiting with uncaught exception (group=0x41b142a0)

vi scirvo anche il codice della connessione:
Codice (Java): [Seleziona]
package com.example.tesi;

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

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
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;
         ResultSet rs;
         
       
        private static final String url = "jdbc:mysql://192.168.1.10:3306/tesina";
    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) {
                 
             
                 new Connessione().execute();
             
              }
         });
     }

     private class Connessione extends AsyncTask<Object, Object, Void> {
       
                @Override
                protected Void doInBackground(Object... arg0) {
                        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(MainActivity.this,classi.class);
                                   i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                               startActivity(i);
                              finish();
                             
                           }
                       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();
                    }  
                    return null;
                        }
               protected void onProgressUpdate(Object... values) {
                 
                }
         
             
                protected void onPostExecute(Void result) {
             
                }
                    }
     
  }

il vero errore che mi preoccupa è questo:
Codice: [Seleziona]
05-06 14:48:20.808: E/AndroidRuntime(20002): FATAL EXCEPTION: AsyncTask #1
05-06 14:48:20.808: E/AndroidRuntime(20002): java.lang.RuntimeException: An error occured while executing doInBackground()
05-06 14:48:20.808: E/AndroidRuntime(20002):         at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.lang.Thread.run(Thread.java:856)
05-06 14:48:20.808: E/AndroidRuntime(20002): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-06 14:48:20.808: E/AndroidRuntime(20002):         at android.os.Handler.<init>(Handler.java:121)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at android.widget.Toast$TN.<init>(Toast.java:361)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at android.widget.Toast.<init>(Toast.java:97)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at android.widget.Toast.makeText(Toast.java:254)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at com.example.tesi.MainActivity$Connessione.doInBackground(MainActivity.java:96)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at com.example.tesi.MainActivity$Connessione.doInBackground(MainActivity.java:1)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-06 14:48:20.808: E/AndroidRuntime(20002):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-06 14:48:20.808: E/AndroidRuntime(20002):         ... 4 more
« Ultima modifica: 06 Maggio 2013, 14:57:55 CEST da alex93 »

Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
Re:Errori inputconnection:connessione galaxy s2 con android 4.1.2 al db remoto
« Risposta #1 il: 07 Maggio 2013, 15:19:19 CEST »
0
non so se c'entra ma stai lanciando l'activity dentro il doinbackground..lanciala nell' onpostexecute

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Errori inputconnection:connessione galaxy s2 con android 4.1.2 al db remoto
« Risposta #2 il: 07 Maggio 2013, 22:56:31 CEST »
0
si quello è un errore che avevo già notato, ma non è quello il problema!!! sul debug si blocca sulle righe di codice relative alle edittext dandomi sto errore di input e non so perché!!! sull'emulatore sul pc( impostato come un galaxy s2) funziona tutto perfettamente!! non capisco!!
« Ultima modifica: 07 Maggio 2013, 22:58:33 CEST da alex93 »

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:Errori inputconnection:connessione galaxy s2 con android 4.1.2 al db remoto
« Risposta #3 il: 08 Maggio 2013, 07:55:38 CEST »
0
Non accedere ad elementi della UI da doinbackgrounds, fallo solamente nelle onPre/PostExecute().
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
Re:Errori inputconnection:connessione galaxy s2 con android 4.1.2 al db remoto
« Risposta #4 il: 08 Maggio 2013, 14:01:08 CEST »
0
come dice bradipao,username a password prendile all'onclick e passali come argomenti all'asynctask

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Errori inputconnection:connessione galaxy s2 con android 4.1.2 al db remoto
« Risposta #5 il: 08 Maggio 2013, 19:49:00 CEST »
0
ok adesso ci provo


Post unito: 08 Maggio 2013, 20:28:48 CEST
secondo voi il controllo sull'username e password  e la query di ricerca, dove è opportuno metterlo nel onPostExecute o nel onProgressUpdate???

Post unito: 08 Maggio 2013, 21:13:01 CEST
ho provato a mettere il tutto io onPOst e non mi da gli stessi errori di input!!!

Codice (Java): [Seleziona]
package com.example.tesi;

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

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
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;
         ResultSet rs;
       
        //private static final String url = "jdbc:mysql://10.0.2.2:3306/tesina";
        private static final String url = "jdbc:mysql://192.168.1.10:3306/tesina";
    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) {
                 
             
                 new Connessione().execute();
             
              }
         });
     }

     private class Connessione extends AsyncTask<Object, Object, Void> {
       
                @Override
                protected Void doInBackground(Object... arg0) {
                        String us = username1.getText().toString();
                   
               
                       
                       
                    try {
                       
                        Class.forName("com.mysql.jdbc.Driver");
                        Connection con = DriverManager.getConnection(url, user, pass);
                        Statement stmt = con.createStatement();
                       rs = (ResultSet) stmt.executeQuery("SELECT * FROM prova WHERE nome='"+us+"'");
                    }
                    catch(Exception e) {
                        e.printStackTrace();
                       
                    }  
                    return null;
                        }
               protected void onProgressUpdate(Object... values) {
                 
                }
         
             
                protected void onPostExecute(Void result) {
                 
                String p = password1.getText().toString();
                       try {
                                        if(rs.next())
                                           {
                                               String dbpass = rs.getString(2);
                                               if(dbpass.equals(p))
                                               {
                                                 
                                                   Intent i = new Intent(MainActivity.this,classi.class);
                                                   i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                                   startActivity(i);
                                                  finish();
                                                 
                                               }
                                           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 (SQLException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        Toast.makeText(getBaseContext(), "applicazione non collegata al database della scuola", Toast.LENGTH_LONG).show();
                                }
                     
                }
                    }
     
  }

Post unito: 08 Maggio 2013, 23:23:16 CEST
ho scoperto che l'errore che riscontro non influisce sulla connessione, è solo un messaggio che mi avvisa che la tastiera cerca di vedere il messaggio che sto inserendo, ma non ci riesce perche l'input connection non è attiva. Cercando su internet ho trovato il mio vero problema, credo di non aver impostato il router in modo che il traffico dati della rete wifi possa essere passato attraverso il pc. Inoltre ho letto che dovrei usare un ip esterno!!
« Ultima modifica: 08 Maggio 2013, 23:23:16 CEST da alex93, Reason: Merged DoublePost »