Autore Topic: Problema con Socket  (Letto 1215 volte)

Offline Daniele8913

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7
  • Sistema operativo:
    Windows 7
Problema con Socket
« il: 30 Gennaio 2014, 18:19:58 CET »
0
Salve a tutti sto implementando un applicazione per comunicare tramite wifi in configurazione server/client con un socket.
Ho seguito vari tutorial per sviluppare tale applicazione ma ogni volta che cerco di connettermi l'app va in crash. Ho inserito i vari permessi nel Manifest.

l'app si blocca in questo punto sulla funzione isChecked
Codice (Java): [Seleziona]
public void onClick(View v){


        switch (v.getId())
        {
            case R.id.connect:
                if(connect.isChecked())
                    enableConnection();
                else disableConnection();
                break;
            case R.id.send:
                sendDataOverConnection();
                break;
        }
    }

la funzione enableConnect è così implementata
Codice (Java): [Seleziona]
  public void setUpIOStreams() throws IOException{

    InetAddress addr = InetAddress.getByName(ipBox.getText().toString());

    Socket client = new Socket(addr , 8888);

    DataOutputStream outToServer = new DataOutputStream(client.getOutputStream());

    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));

    }


    private void enableConnection (){
        try{
            setUpIOStreams();
            String ip = client.getInetAddress().toString();
            String ipAddress = getLocalIpAddress();

            setText(R.id.text,"Device's IP Address: " + ipAddress);
            setText(appendText,"Server's IP Address: " + ip.substring(1));
            setText(msgBoxHint, "Say something...");
            setText(appendText, "Enter your message then press the send button");

            setValues(R.id.connect,true);
            setValues(R.id.send,true);
            setValues(R.id.ipBox,false);
            setValues(R.id.msgBox,true);
        } catch (IOException e) {

            setValues(R.id.connect, false);
            Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();

        }
    }

vi posto anche il logCat.
Codice: [Seleziona]
01-30 18:10:39.901    6021-6021/? D/dalvikvm﹕ Late-enabling CheckJNI
01-30 18:10:39.961    6021-6021/com.aclientactivity W/ActivityThread﹕ Application com.aclientactivity can be debugged on port 8100...
01-30 18:10:40.231    6021-6021/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libEGL_tegra.so
01-30 18:10:40.351    6021-6021/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_tegra.so
01-30 18:10:40.371    6021-6021/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv2_tegra.so
01-30 18:10:40.501    6021-6021/com.aclientactivity D/OpenGLRenderer﹕ Enabling debug mode 0
01-30 18:10:51.831    6021-6021/com.aclientactivity D/AndroidRuntime﹕ Shutting down VM
01-30 18:10:51.831    6021-6021/com.aclientactivity W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x417d1ba8)
01-30 18:10:51.861    6021-6021/com.aclientactivity E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.aclientactivity, PID: 6021
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3823)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3818)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.aclientactivity.AClientActivity.onClick(AClientActivity.java:198)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3818)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

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:Problema con Socket
« Risposta #1 il: 30 Gennaio 2014, 18:34:39 CET »
0
Citazione
     Caused by: java.lang.NullPointerException
            at com.aclientactivity.AClientActivity.onClick(AClientActivity.java:198)

Cosa può essere NULL alla riga 198 di AClientActivity.java ?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daniele8913

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7
  • Sistema operativo:
    Windows 7
Re:Problema con Socket
« Risposta #2 il: 30 Gennaio 2014, 18:38:54 CET »
0
grazie per la risposta  :-)
si avevo notato questa exception ma non capisco il perchè ho provato a usare un breakpoint e la funzione si ferma sulla riga
Codice (Java): [Seleziona]
 if(connect.isChecked())

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:Problema con Socket
« Risposta #3 il: 30 Gennaio 2014, 18:51:26 CET »
0
Se quella è la riga 198, allora connect è NULL. Puoi mettere un Log.d() e verificarlo facilmente.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daniele8913

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7
  • Sistema operativo:
    Windows 7
Re:Problema con Socket
« Risposta #4 il: 30 Gennaio 2014, 18:52:44 CET »
0
quella che ti ho evidenziato se vuoi posso postarti tutto il codice!

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:Problema con Socket
« Risposta #5 il: 30 Gennaio 2014, 18:53:33 CET »
0
Verifica che connect non sia NULL prima di chiamare ischecked().
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daniele8913

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7
  • Sistema operativo:
    Windows 7
Re:Problema con Socket
« Risposta #6 il: 30 Gennaio 2014, 19:06:09 CET »
0
si in effetti connect è nullo... ho provato a commentare l'if ma non va lo stesso...

questo è il logCat
Codice: [Seleziona]
01-30 18:58:27.426  10681-10681/com.aclientactivity D/dalvikvm﹕ Late-enabling CheckJNI
01-30 18:58:27.486  10681-10681/com.aclientactivity W/ActivityThread﹕ Application com.aclientactivity can be debugged on port 8100...
01-30 18:58:27.636  10681-10681/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libEGL_tegra.so
01-30 18:58:27.656  10681-10681/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_tegra.so
01-30 18:58:27.666  10681-10681/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv2_tegra.so
01-30 18:58:27.696  10681-10681/com.aclientactivity D/OpenGLRenderer﹕ Enabling debug mode 0
01-30 18:58:37.986  10681-10681/com.aclientactivity D/AndroidRuntime﹕ Shutting down VM
01-30 18:58:37.986  10681-10681/com.aclientactivity W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x417d1ba8)
01-30 18:58:37.986  10681-10681/com.aclientactivity E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.aclientactivity, PID: 10681
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3823)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3818)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.aclientactivity.AClientActivity.setUpIOStreams(AClientActivity.java:108)
            at com.aclientactivity.AClientActivity.enableConnection(AClientActivity.java:121)
            at com.aclientactivity.AClientActivity.onClick(AClientActivity.java:199)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3818)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

si incarta ora in questa funzione
Codice (Java): [Seleziona]
   public void setUpIOStreams() throws IOException{

    InetAddress addr = InetAddress.getByName(ipBox.getText().toString());

    Socket client = new Socket(addr , 8888);

    DataOutputStream outToServer = new DataOutputStream(client.getOutputStream());

    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));

    }
in effetti mi da un warning su InetAddress.getByName(...) dicendomi che potrebbe produrre un NullPointerException.
Cosa posso fare?
Ti ringrazio per la disponibilità!

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:Problema con Socket
« Risposta #7 il: 30 Gennaio 2014, 19:13:43 CET »
0
si in effetti connect è nullo... ho provato a commentare l'if ma non va lo stesso...

Non è che togliendo l'IF togli il problema. Devi fare in modo che connect non sia null. Risali a dove viene valorizzato e scopri perchè è null.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daniele8913

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7
  • Sistema operativo:
    Windows 7
Re:Problema con Socket
« Risposta #8 il: 30 Gennaio 2014, 19:36:45 CET »
0
Sono riuscito a risolvere il problema del connect... ora mi da errore nella creazione del socket come mai??
ho inserito l'IP del mio pc ma l'app crasha ancora.



ti inserisco il logCat
Codice: [Seleziona]
01-30 19:31:22.116  15217-15217/com.aclientactivity D/dalvikvm﹕ Late-enabling CheckJNI
01-30 19:31:22.176  15217-15217/com.aclientactivity W/ActivityThread﹕ Application com.aclientactivity can be debugged on port 8100...
01-30 19:31:22.376  15217-15217/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libEGL_tegra.so
01-30 19:31:22.426  15217-15217/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_tegra.so
01-30 19:31:22.446  15217-15217/com.aclientactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv2_tegra.so
01-30 19:31:22.506  15217-15217/com.aclientactivity D/OpenGLRenderer﹕ Enabling debug mode 0
01-30 19:31:34.586  15217-15217/com.aclientactivity D/AndroidRuntime﹕ Shutting down VM
01-30 19:31:34.586  15217-15217/com.aclientactivity W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x417d1ba8)
01-30 19:31:34.596  15217-15217/com.aclientactivity E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.aclientactivity, PID: 15217
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3823)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3818)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.os.NetworkOnMainThreadException
            at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
            at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
            at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
            at libcore.io.IoBridge.connect(IoBridge.java:112)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
            at java.net.Socket.startupSocket(Socket.java:567)
            at java.net.Socket.<init>(Socket.java:226)
            at com.aclientactivity.AClientActivity.setUpIOStreams(AClientActivity.java:119)
            at com.aclientactivity.AClientActivity.enableConnection(AClientActivity.java:130)
            at com.aclientactivity.AClientActivity.onClick(AClientActivity.java:208)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3818)
            at android.view.View.performClick(View.java:4438)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
e la riga dove si blocca
Codice (Java): [Seleziona]
    private String getLocalIpAddress(){

        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

        WifiInfo info = wifi.getConnectionInfo();

        return android.text.format.Formatter.formatIpAddress(info.getIpAddress());
    }


    public void setUpIOStreams() throws IOException{

    InetAddress addr = InetAddress.getByName(ipBox.getText().toString());

    Socket client = new Socket(addr , 8888);

    DataOutputStream outToServer = new DataOutputStream(client.getOutputStream());

    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));

    }
Scusami del disturbo, ti ringrazio per il tuo aiuto sono due giorni che sto cercando di capire!

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:Problema con Socket
« Risposta #9 il: 30 Gennaio 2014, 19:47:21 CET »
+1
Capisco che all'inizio può essere difficile, ma devi fare pratica nel leggere il LogCat perchè nel 99% dei casi la ragione è scritta lì.  :-)

La causa del crash è:
Codice: [Seleziona]
Caused by: android.os.NetworkOnMainThreadException
Se cerchi su google o anche nel sito ufficiale android.com trovi questa spiegazione:
NetworkOnMainThreadException | Android Developers

In pratica tutte le chiamate di rete DEVONO essere svolte in un thread separato da quello principale (quello della user Interface). Puoi usare AsyncTask, Thread o addirittura librerie che si occupano di gestire in autonomia AsyncTask o Thread (trovi un tutorial anche su questo forum).


NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Daniele8913

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7
  • Sistema operativo:
    Windows 7
Re:Problema con Socket
« Risposta #10 il: 30 Gennaio 2014, 20:41:52 CET »
0
Ti ringrazio per l'aiuto domani studierò l'AsyncTask.
Ti farò sapere! :-)

Post unito: 30 Gennaio 2014, 22:11:50 CET
Grazie mille,
ho implementato l'AsyncTask e grazie ai tuoi consigli e leggendo il LogCat sono riuscito a comunicare!
« Ultima modifica: 30 Gennaio 2014, 22:11:50 CET da Daniele8913, Reason: Merged DoublePost »