Lite hjälp med enkelt client program.

Diskussion i 'Frågor, support och diskussion' startad av RaiL, 22 nov 2010.

  1. RaiL

    RaiL Infant Droid Medlem

    Blev medlem:
    22 nov 2010
    Inlägg:
    3
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej! jag började programmera i java för ett tag sen och lär mig sakta men säkert. Nu har jag tagit mig lite vatten över huvudet och gett mig på ett försök till socket programmering då behovet av en lite app uppstod. Grunden är egentligen bara att jag vill kunna trycka på / släppa upp en knapp och skicka en sträng till en server.

    vad gör jag för fel? alt finns det någon mycket enklare lösning för det här som jag har missat.

    Kod:
    package carne.client;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.*;
    import android.widget.Button;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import carne.client.R;
    
    
    public class Carne extends Activity {
    
        private final static String TAG = "Carne"; 
        Socket ClientSocket = null;
    	DataOutputStream out = null;
    
    	private Button Bajs;
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
        	
            super.onCreate(savedInstanceState);
            Connect();
            setContentView(R.layout.main);
            
            
            this.setContentView(R.layout.main);
            this.Bajs = (Button)this.findViewById(R.id.Bajs);
            this.Bajs.setOnTouchListener(new OnTouchListener() {
              public boolean onTouch(View view, MotionEvent event) {
              	switch(event.getAction()){
              	case MotionEvent.ACTION_DOWN: 
              		SendCommand("ner");
              		break;
              	case MotionEvent.ACTION_UP: 
              		SendCommand("upp");
              		break;
              	}
    				return true;
              }
            });
    
            
    
        }
        
        public void OnPause(){
        	super.onPause();
        	Disconnect();
        	this.finish();
        }
        
        public void onFreeze(){
        	
        }
        
        public void onDestroy()
        {
        	Disconnect();
        	super.onDestroy();
        }
        
        public void Connect(){
        	try{
        		Log.v(TAG, "Attempting to connect!");
        		ClientSocket = new Socket("10.0.2.1", 2004);
        		ClientSocket.setSoTimeout(5);
        	} catch (IOException IOE) {
        		Log.e(TAG, IOE.getMessage());
        	}
        	try{
        		out = new DataOutputStream(ClientSocket.getOutputStream());
            } catch (UnknownHostException UHE) {
            	Log.e(TAG, UHE.getMessage());
            } catch (IOException IOE) {
            	Log.e(TAG, IOE.getMessage());
    		}
            SendCommand("CONN");
        }
        
        public void Disconnect(){
        	SendCommand("DISC");
        }
        
        public void SendCommand(String command){
        	try {
    			out.writeUTF(command);
    			out.flush();
    			Log.v(TAG,"Sending command: "+command);
    		} catch (IOException IOE) {
    			Log.e(TAG, IOE.getMessage());
    		}
        }
    }
    Tack på förhand
    RaiL :o
     
  2. softarn

    softarn Teen Droid Medlem

    Blev medlem:
    4 mar 2010
    Inlägg:
    361
    Mottagna gillanden:
    9

    MINA ENHETER

    Skriv gärna vad det är för fel du får också, får du ett felmeddelande?
     
  3. RaiL

    RaiL Infant Droid Medlem

    Blev medlem:
    22 nov 2010
    Inlägg:
    3
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag får inget fel i eclipse men när jag kör appen så krashar den och säger "The application has stoped unexpectedly".

    Kan det vara något fel med att den inte får kontakt med servern och därför väljer att avsluta sig själv. Det kanske skulle fungera att lägga det här:

    Kod:
        public void Connect(){
        	try{
        		Log.v(TAG, "Attempting to connect!");
        		ClientSocket = new Socket("10.0.2.1", 2004);
        		ClientSocket.setSoTimeout(5);
        	} catch (IOException IOE) {
        		Log.e(TAG, IOE.getMessage());
        	}
        	try{
        		out = new DataOutputStream(ClientSocket.getOutputStream());
            } catch (UnknownHostException UHE) {
            	Log.e(TAG, UHE.getMessage());
            } catch (IOException IOE) {
            	Log.e(TAG, IOE.getMessage());
    		}
            SendCommand("CONN");
        }
    
    på en knapp istället och se om den inte krashar föräns jag trycker på knappen?
     
  4. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    Är inte 10.x.x.x interna adresser? Går det att komma åt dem utifrån internet?

    "The application has stoped unexpectedly" får du när ett exception kastas som du inte tar hand om. I logcat-loggen finns det utskrivet. Bifoga här om du vill ha hjälp att tyda det.
     
  5. softarn

    softarn Teen Droid Medlem

    Blev medlem:
    4 mar 2010
    Inlägg:
    361
    Mottagna gillanden:
    9

    MINA ENHETER

    Om du ska lära dig om nätverksprogrammering är det kanske lättare om du gör det i vanlig java först och inte i android. Går snabbare eftersom du inte behöver bygga det till en apk varje gång. Dessutom slipper du problem som är android relaterade. Sen kan du ju försöka göra det till en app och då ta itu med android programmeringen.
     
  6. RaiL

    RaiL Infant Droid Medlem

    Blev medlem:
    22 nov 2010
    Inlägg:
    3
    Mottagna gillanden:
    0

    MINA ENHETER

    ozp:

    Jo jag använde en portforward på den adressen för att få tillbaka anslutningen till programeringsdatorn. Kan det vara där det har falerat? bara för att den inte kan ansluta till servern? Kan jag lägga till något som får den att inte krasha trotts att den inte får kontakt i så fall?

    Loggen:
    Kod:
    I/ActivityManager(   66): Starting activity: Intent { act=android.intent.action.
    MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=carne.client/.fun
    gera }
    I/ActivityManager(   66): Start proc carne.client for activity carne.client/.fun
    gera: pid=432 uid=10035 gids={1015}
    D/AndroidRuntime(  432): Shutting down VM
    W/dalvikvm(  432): threadid=1: thread exiting with uncaught exception (group=0x4
    001d800)
    E/AndroidRuntime(  432): FATAL EXCEPTION: main
    E/AndroidRuntime(  432): java.lang.RuntimeException: Unable to instantiate activ
    ity ComponentInfo{carne.client/carne.client.fungera}: java.lang.ClassNotFoundExc
    eption: carne.client.fungera in loader dalvik.system.PathClassLoader[/data/app/c
    arne.client-1.apk]
    E/AndroidRuntime(  432):        at android.app.ActivityThread.performLaunchActiv
    ity(ActivityThread.java:2585)
    E/AndroidRuntime(  432):        at android.app.ActivityThread.handleLaunchActivi
    ty(ActivityThread.java:2679)
    E/AndroidRuntime(  432):        at android.app.ActivityThread.access$2300(Activi
    tyThread.java:125)
    E/AndroidRuntime(  432):        at android.app.ActivityThread$H.handleMessage(Ac
    tivityThread.java:2033)
    E/AndroidRuntime(  432):        at android.os.Handler.dispatchMessage(Handler.ja
    va:99)
    E/AndroidRuntime(  432):        at android.os.Looper.loop(Looper.java:123)
    E/AndroidRuntime(  432):        at android.app.ActivityThread.main(ActivityThrea
    d.java:4627)
    E/AndroidRuntime(  432):        at java.lang.reflect.Method.invokeNative(Native
    Method)
    E/AndroidRuntime(  432):        at java.lang.reflect.Method.invoke(Method.java:5
    21)
    E/AndroidRuntime(  432):        at com.android.internal.os.ZygoteInit$MethodAndA
    rgsCaller.run(ZygoteInit.java:868)
    E/AndroidRuntime(  432):        at com.android.internal.os.ZygoteInit.main(Zygot
    eInit.java:626)
    E/AndroidRuntime(  432):        at dalvik.system.NativeStart.main(Native Method)
    
    E/AndroidRuntime(  432): Caused by: java.lang.ClassNotFoundException: carne.clie
    nt.fungera in loader dalvik.system.PathClassLoader[/data/app/carne.client-1.apk]
    
    E/AndroidRuntime(  432):        at dalvik.system.PathClassLoader.findClass(PathC
    lassLoader.java:243)
    E/AndroidRuntime(  432):        at java.lang.ClassLoader.loadClass(ClassLoader.j
    ava:573)
    E/AndroidRuntime(  432):        at java.lang.ClassLoader.loadClass(ClassLoader.j
    ava:532)
    E/AndroidRuntime(  432):        at android.app.Instrumentation.newActivity(Instr
    umentation.java:1021)
    E/AndroidRuntime(  432):        at android.app.ActivityThread.performLaunchActiv
    ity(ActivityThread.java:2577)
    E/AndroidRuntime(  432):        ... 11 more
    W/ActivityManager(   66):   Force finishing activity carne.client/.fungera
    W/ActivityManager(   66): Activity pause timeout for HistoryRecord{43e5d640 carn
    e.client/.fungera}
    
    Softarn:
    Jo jag har tänkt att ta och lära mig på det sättet men det uppstod ett behov av en sån här app för mig så jag tänkte att jag ger mig på ett försök. Något lär man sig ju alltid.
     
  7. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    Enligt loggen får du ett java.lang.ClassNotFoundException: carne.client.fungera när du försöker instantiera den. Den hittas alltå inte av ClassLoadern.

    Är det en Activity? Har du med den i manifestet?
     
  8. Reconnnn

    Reconnnn Professional Droid Hedersmedlem

    Blev medlem:
    9 mar 2010
    Inlägg:
    2 809
    Mottagna gillanden:
    263

    MINA ENHETER