Socketverbindung wirft uncaught exception

  • 1 Antworten
  • Letztes Antwortdatum
C

chip

Neues Mitglied
0
Hi,

ich habe folgende kleine Klasse:

Code:
package de.imm.hska.midas;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

public class ClientActivity extends ListActivity {

    
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
          
    
        String[] values = new String[] { "irgendwas", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2" };
        
        String[] values2 = new String[] { "Android_2", "iPhone_2", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };
        
        ClientArrayAdapter adapter = new ClientArrayAdapter(this, values, values2);
        setListAdapter(adapter);

      }
    
    public void onStart()
    {
        Socket t = null;
        try {
            t = new Socket ("193.196.72.180",4444);
            BufferedReader in = new BufferedReader(new InputStreamReader( t.getInputStream()) );
            String s = in.readLine();
            Toast.makeText(this, s , Toast.LENGTH_LONG).show();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
          if ( t != null )
            try { t.close(); } catch ( IOException e ) { e.printStackTrace(); }
        }
    }

      @Override
      protected void onListItemClick(ListView l, View v, int position, long id) {
        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
      }
      
     
    }
Wenn ich diese nun allerdings ausführe bekomme ich diesen Fehler in LogCat.


11-28 07:12:13.725: D/AbsListView(24864): Get MotionRecognitionManager
11-28 07:12:13.730: D/AndroidRuntime(24864): Shutting down VM
11-28 07:12:13.730: W/dalvikvm(24864): threadid=1: thread exiting with uncaught exception (group=0x40c701f8)
11-28 07:12:13.735: E/AndroidRuntime(24864): FATAL EXCEPTION: main
11-28 07:12:13.735: E/AndroidRuntime(24864): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.imm.hska.midas/de.imm.hska.midas.ClientActivity}: android.os.NetworkOnMainThreadException
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.ActivityThread.access$600(ActivityThread.java:128)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.os.Looper.loop(Looper.java:137)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.ActivityThread.main(ActivityThread.java:4517)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.lang.reflect.Method.invoke(Method.java:511)
11-28 07:12:13.735: E/AndroidRuntime(24864): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:995)
11-28 07:12:13.735: E/AndroidRuntime(24864): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
11-28 07:12:13.735: E/AndroidRuntime(24864): at dalvik.system.NativeStart.main(Native Method)
11-28 07:12:13.735: E/AndroidRuntime(24864): Caused by: android.os.NetworkOnMainThreadException
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
11-28 07:12:13.735: E/AndroidRuntime(24864): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
11-28 07:12:13.735: E/AndroidRuntime(24864): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-28 07:12:13.735: E/AndroidRuntime(24864): at libcore.io.IoBridge.connect(IoBridge.java:112)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.net.Socket.startupSocket(Socket.java:566)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.net.Socket.tryAllAddresses(Socket.java:127)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.net.Socket.<init>(Socket.java:177)
11-28 07:12:13.735: E/AndroidRuntime(24864): at java.net.Socket.<init>(Socket.java:149)
11-28 07:12:13.735: E/AndroidRuntime(24864): at de.imm.hska.midas.ClientActivity.onStart(ClientActivity.java:44)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1137)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.Activity.performStart(Activity.java:4589)
11-28 07:12:13.735: E/AndroidRuntime(24864): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1943)
11-28 07:12:13.735: E/AndroidRuntime(24864): ... 11 more
Jemand eine Idee was das schief läuft?
 
Steht da doch:

11-28 07:12:13.735: E/AndroidRuntime(24864): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.imm.hska.midas/de.imm.hska.midas.ClientActivity}: android.os.NetworkOnMainThreadException
Ja, du machst eine Socket-Verbindung im UI Thread auf. Das darf man nicht.

Lösung:

  1. Forensuche nach dieser Exception
  2. AsyncTask benutzen.
 
Zurück
Oben Unten