Android Programm stürzt ab - Es geht um Netzwerk

Pommes9485

Bekanntes Mitglied
Hallo,

ich wollte meinen Netzwerk Chat jetzt auch noch auf Android ausweiten.

Dafür habe ich erstmal eine sehr einfache Form gemacht, inder das Handy einfach nur eine Verbindung herstellt und dann eine Nachricht ausgibt, welche vom Server geschickt wurde.

Aber die APP schließt sich und ich weis nicht wieso.
Hier der Code der Android APP:

Java:
package com.example.helloandroid;



import android.app.Activity;

import android.os.Bundle;
import android.view.View;

import android.widget.*;
public class HelloWorldActivity extends Activity {
    /** Called when the activity is first created. 
     * 
     * @return */
verbinden cl;
	
    @Override
    public void  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
      Button mButton = (Button) findViewById(R.id.button1);
      final EditText tv = (EditText) findViewById(R.id.editText1);
     
     
      mButton.setOnClickListener(new View.OnClickListener() {

          public void onClick(final View pView) {
            cl = new verbinden(String.valueOf(tv.getText()));
            cl.run();
           }});  
    }
}

und verbinden :

Java:
package com.example.helloandroid;

import java.net.*;
import java.util.Scanner;
import java.io.*;

import android.app.Activity;
import android.widget.EditText;

public class verbinden extends Activity{
Socket server;
Scanner in;
String nachricht="";
String ipp;
final EditText tv2 = (EditText) findViewById(R.id.editText2);

public boolean verbindung = false;
public verbinden(String ip)
{ipp=ip;}
public void run() {
	try{
server = new Socket(ipp,550);
verbindung = true;

}
catch(IOException i){i.printStackTrace();}
try{
	 in = new Scanner(server.getInputStream());
	}
	catch(IOException i){i.printStackTrace();}
	for(int i=0;i<1000;i++)
	     {


	               nachricht = in.nextLine();
	             if(!nachricht.equals(""))
	              {
	               tv2.setText(nachricht);
	            	   i=0;
	              }
	       }

}
}

Ich habe bei verbinden auch die Schleife schon rausgenommen, da diese auch bei JavaME schonmal Probleme machte, allerdings bringt das nichts.

Was ist da los `?

Mfg Marvin
 
Warum leitet deine Klasse verbinden von Activity ab? Macht überhaupt keinen Sinn da man eine Activity über einen Intent verwendet. Außerdem ist eine Activity so etwas in der Art wie ein Fenster.

Du benötigst hier doch gar kein Fenster.

Außerdem: Was spuckt den der logcat aus? Wenn du mit Eclipse entwickelst kannst du dir die Logcat-View aufdrehen und dann siehst du was schief läuft.

Die Chancen stehen nämlich gut dass du:
- Nicht die nötigen Permissions für's Netzwerk im AndroidManifest.xml eingetragen hast.
- Deine merkwürdige Activity-Anwendung dem Framework nicht passt.

Falls du die verbinden-Activity als Warte-Fenster verwenden möchtest, nimm lieber einen Dialog und mach das Verbinden in einem AsyncTask. Der Netzwerkcode scheint aber auf den ersten Blick richtig zu sein.

Edit:/
- Naming-Guidelines durchlesen bitte ;-) Eine Klasse sollte nie nach einem Verb benannt sein und das hat seinen Grund.
 
Ich habe es deswegen von Activity erben lassen, damit die Klasse mit dem editText klarkommt.

Wie genau trage ich denn die Rechte in die Datei ein ?
Habe sie zwar schon gefunden, aber bei Android Developers stehen nur die Rechte, nicht aber wie ich sie eintrage ...

/EDIT :
Nachdem ich gemerkt habe, wie blöd es ist, deswegen einfach von Activity zu erben, habe ich die beiden Klassen so umgeschrieben, das die erste von Activity erbt und die zweite vom Thread.
Laut Compiler läuft das alles auch, aber in der Praxis immer noch nicht. Ich bemühe mich mal um dieses Log Programm.
//EDIT2:
Ich habe mir das LogCat fenster anzeigen lassen und mittels diesem Code:
Log.d("onClick", "cl gestartet");
Sollte auch was in diesem Fenster angezeigt werden. Wird es aber nicht.

Was da los 😀
 
Zuletzt bearbeitet:
Ich habe jetzt den Task eingefügt, es sieht jetzt insgesamt so aus :

Java:
package com.example.helloandroid;



import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.util.Log;

import android.widget.*;
public class HelloWorldActivity extends Activity {
    /** Called when the activity is first created. 
     * 
     * @return */
verbinden cl;
boolean fertig = true;
	
    @Override
    public void  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
      Button mButton = (Button) findViewById(R.id.button1);
      final EditText tv = (EditText) findViewById(R.id.editText1);
      final EditText tv2 = (EditText) findViewById(R.id.editText2);
     
      mButton.setOnClickListener(new View.OnClickListener() {

          public void onClick(final View pView){
        	
        	  while(true){
        	 
        		  new verbinden(String.valueOf(tv.getText()), tv2).execute();
        	 
        	  
        	  }
            
           
            
           }});  
    }
}

Und verbinden:

Java:
package com.example.helloandroid;

import java.net.*;
import java.util.Scanner;
import java.io.*;


import android.widget.EditText;
import android.os.AsyncTask;
import android.util.Log;

public class verbinden extends AsyncTask<Void, Void, Void>{
Socket server;
Scanner in;
String nachricht="";
String ipp;
EditText ed;



public boolean verbindung = false;
public verbinden(String ip, EditText edit)
{ipp=ip;ed = edit;}
public void run() {
	

}
protected Void doInBackground(Void... params) {
	try{
		server = new Socket(ipp,550);
		verbindung = true;
		System.out.println("Verbindung hergestellt");
		}
		catch(IOException i){i.printStackTrace();Log.e("verbinden", i.getMessage());}
		try{
			 in = new Scanner(server.getInputStream());
			}
			catch(IOException i){i.printStackTrace();Log.e("Scannen", i.getMessage());;}
			


			               nachricht = in.nextLine();
			            
			       
			return null;
	
}
protected void onPostExecute() {
    if(!nachricht.equals("")){
    	ed.setText(nachricht);
    	
    }
}
}

Ich bekomme auch keine Meldung nach aussen, dann könnte ich wenigstens das Feststellen.

Angeblich soll System.out ja mit LogCat gehen, aber da steht nichts...

EDIT :

LogCat läuft nachdem ich Eclipse neugestartet habe und anhand der Meldung ist mit klar geworden, dass der Emulator kein WiFi unterstützt. Daher muss jetzt mein Handy ran, aber das hat ja kein LogCat...

Gibts da irgendein Möglichkeit ?
 
Zuletzt bearbeitet:
Hallo,

dein Handy hat Logcat. Probier es einfach aus. Du musst nur Debugging einschalten und den Rest sollte Eclipse von alleine erledigen. Womöglich fragt Eclipse zuvor noch einmal per Auswahldialog nach ob du deinen Emulator oder dein Telefon verwenden möchtest wenn du die App startest aber das war es schon.

Übrigens hab ich dir ein kleines Beispiel geschrieben bei dem du dir anschauen kannst wie du das mit nem AsyncTask samt Wartedialog machst.

Ich hab dir zwei Eclipse-Testprojekte angehängt. Vielleicht kannst du das ja noch brauchen.
 

Anhänge

Zuletzt bearbeitet:

Zurück
Oben