PDA

View Full Version : [Java per android 3.0] Socket che fanno crashare il programma


guylmaster
28-07-2011, 16:35
Salve a tutti,
in poche parole sto provando a fare un mini programmino che comunica tramite socket. Sul mio pc fisso ho già un server scritto in java che comunicava tramite socket e stavo provando in pratica a sviluppare un client da far girare sul mio tablet android 3.0 che comunichi con il server che ho sul pc.
Ho provato a scrivere poche righe di codice sfruttando le librerie standard del java:


package com.neptune.prova3;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import com.neptune.prova3.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class Android3Activity extends Activity {
/** Called when the activity is first created. */
private ObjectOutputStream out;
private ObjectInputStream in;
private InetAddress addr;
Socket socket;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//Connessione al server
try {
// indirizzo riservato al localhost 127.0.0.1
addr = InetAddress.getByName("192.168.1.101");
} catch (UnknownHostException e1) {
e1.printStackTrace();
((TextView) this.findViewById(R.id.textView1)).setText(e1.getMessage());
}
try {
socket = new Socket(addr, 8085);
//out = new ObjectOutputStream(socket.getOutputStream());
//in = new ObjectInputStream(socket.getInputStream());
((TextView) this.findViewById(R.id.textView1)).setText("CREATO IL SOCKET");
} catch (IOException e1) {
e1.printStackTrace();
socket = null;
((TextView) this.findViewById(R.id.textView1)).setText(e1.getMessage());

}
}
}


Ma mi sollevava l'eccezione Access Denied, quindi documentandomi su internet ho visto che bisognava abilitare i permessi nel file Manifest, nella fattispecie i permessi per internet, ho quindi modificato il mio file manifest in questa maniera:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.neptune.prova3"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="11" />
<uses-permission android:name="android.permission.INTERNET" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Android3Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
</manifest>


nella fattispecie ho aggiunto la seguente riga:

<uses-permission android:name="android.permission.INTERNET" />


aggiungendo questa riga però il programma appena avviato crasha.

Non riesco proprio a capire da cosa dipenda, contando tra l'altro la semplicità del programma. Avete qualche idea a riguardo?

Vi ringrazio in anticipo,
guylmaster.

kevinpirola
28-07-2011, 16:38
devi mostrarci lo stacktrace dell'eccezione (se ti lancia eccezioni) per capirci qualcosa

a naso però c'è un qualche problema o sull'ip (ed eventuali aperture di porte), stai provando in locale?

oppure sulla porta (che è chiusa o già in uso o tante cose)... prova a spostare la porta a numeri più alti tipo 12345...

guylmaster
28-07-2011, 20:47
devi mostrarci lo stacktrace dell'eccezione (se ti lancia eccezioni) per capirci qualcosa

a naso però c'è un qualche problema o sull'ip (ed eventuali aperture di porte), stai provando in locale?

oppure sulla porta (che è chiusa o già in uso o tante cose)... prova a spostare la porta a numeri più alti tipo 12345...

Non è un problema di porta perchè l'altro client scritto in java per pc funziona benissimo. Inoltre non solleva nessuna eccezione, crasha il programma prima ancora di avviarsi per questo non ho nessun indizio a riguardo.

wingman87
28-07-2011, 22:33
Facendo il debug dovresti poter vedere lo stacktrace.
Lo spero almeno, perché devo cimentarmi anch'io con Android...

cdimauro
29-07-2011, 06:22
Ti faccio le mie condoglianze, allora. :D

Tornando all'argomento, c'è un log molto dettaglio di tutte le operazioni che sono state eseguite dalla virtual machine o dal telefonino Android, ivi inclusi gli stacktrace delle eccezioni.

Eclipse dovrebbe mostrarlo grazie al plug-in installato. Adesso non ricordo bene il nome della finestra / tab: qualcosa come ADB log o simile.

Al limite lo stesso log è disponibile da command line: ADB.exe logcat (ADB,EXE si trova nella cartella bin dell'SDK di Android).

Leggerlo è un casino, e a volte è consigliabile mettere dei

System.out.println("*****************************************");

kevinpirola
30-07-2011, 01:04
provalo sul telefono a me è capitato delle volte che sul pc non andava mentre sul telefono era perfetto