2013-06-12 36 views
-1

我有一个android程序谁可以在textview上获得触摸位置,但是当我通过套接字发送协调协调时,程序发送一次并直接崩溃。Android我尝试通过套接字发送触摸位置。该程序发送它,但它崩溃

你有什么想法吗?

java文件中的代码。

final TextView tvCamera = (TextView)findViewById(R.id.textViewCamera); 
    // this is the view on which you will listen for touch events 
    final View touchView = findViewById(R.id.touchViewCamera); 
       touchView.setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         int x = (int) (event.getX()-150); 
         int y = (int) (event.getY()-150)*(-1); 
         if (x<-150) 
          x=-150; 
         else if (x>150) 
          x=150;       
         if (y<-150) 
          y=-150; 
         else if (y>150) 
          y=150; 
         tvCamera.setText("Coordonnées Camera : (X:Y) "+String.valueOf(x) + " : " + String.valueOf(y)); 
         try {        
          ClientSocket.requete("SC 05 "+String.valueOf(x)); 
          Log.d("Message", "Message caméra envoyé"); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          Log.d("Message", "Message caméra echec"); 
          e.printStackTrace(); 
         }      
          return true;         
        }      
       }); 

在请求文件的.java

public class ClientSocket { 
    private static Socket socket; 
    private static BufferedReader in; 
    private static PrintWriter out; 

    public ClientSocket(String nomSrv, int port) throws Exception { 
    socket = new Socket(nomSrv, port); 
    out = new PrintWriter(socket.getOutputStream(), true); 
    in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
} 



public static String requete(String msg) throws IOException { 
    out.println(msg); 
    String line = in.readLine(); 
    return line; 
} 

public static void fermeture() throws IOException{ 
    in.close(); 
    out.close(); 
    socket.close(); 
} 

}代码

当我触摸屏幕和发送 “ClientSocket.requete(” SC 05“+将String.valueOf(x)的);” 我遇到问题: String line = in.readLine();

报告标签:

八月六日至12日:25:13.214:d/dalvikvm(785):GC_FOR_ALLOC释放65K,8%的游离 2479K/2672K,暂停88ms,共91ms八月六日至12日:25:13.283: I/dalvikvm-heap(785):增长堆(碎片情况)为9.869MB,用于 7680016-字节分配06-12 08:25:13.333:D/dalvikvm(785): GC_FOR_ALLOC已释放< 1K,2%免费9978K/10176K,暂停47ms,总计47ms 06-12 08:25:13.383:D/dalvikvm(785):GC_CONCURRENT已释放< 1K,2%免费 9978K/10176K,暂停5ms + 5ms, 57ms 06-12 08:25:14.03 4: D/libEGL(785):loaded /system/lib/egl/libEGL_emulation.so 06-12 08:25:14.044:D /(785):HostConnection :: get()新建主机连接 建立0x2a1835e8, tid 785 06-12 08:25:14.074:D/libEGL(785): loaded /system/lib/egl/libGLESv1_CM_emulation.so 06-12 08:25:14.084: D/libEGL(785):loaded/system /lib/egl/libGLESv2_emulation.so 06-12 08:25:14.236:W/EGL_emulation(785):eglSurfaceAttrib未实现 06-12 08:25:14.255:D/OpenGLRenderer(785):启用调试模式0 06 -12 08:25:16.134:I/System.out(785):Vous ete connecter car reception du message:S0 06-12 08:25:16.134:I/System.out(785):Connexionétablie avec乐队! 06-12 08:25:16.134:I/System.out(785):S0 06-12 08:25:17.143:E/InputEventReceiver(785):异常调度输入 事件。 06-12 08:25:17.143:E/MessageQueue-JNI(785):在 中的异常MessageQueue回调:handleReceiveCallback 06-12 08:25:17.244: E/MessageQueue-JNI(785):android.os.NetworkOnMainThreadException 06 -12 08:25:17.244:E/MessageQueue-JNI(785):at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 06-12 08:25:17.244:E/MessageQueue- JNI(785):at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)06-12 08:25:17.244:E/MessageQueue-JNI(785):at libcore.io.IoBridge.recvfrom( IoBridge.java:513)06-12 08:25:17.244: E/MessageQueue-JNI(785):at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)06-12 08:25:17.244 :E/MessageQ ueue-JNI(785):at java.net.PlainSocketImpl.access $ 000(PlainSocketImpl.java:46)06-12 08:25:17.244:E/MessageQueue-JNI(785):at java.net.PlainSocketImpl $ PlainSocketInputStream.read(PlainSocketImpl.java:240) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at java.io.InputStreamReader.read(InputStreamReader.java:244)06-12 08:25:17.244:E/MessageQueue-JNI(785):at java.io.BufferedReader.fillBuf(BufferedReader.java:130)06-12 08 :25:17.244:E/MessageQueue-JNI(785):at java.io.BufferedReader.readLine(BufferedReader.java:354)06-12 08:25:17.244:E/MessageQueue-JNI(785):at sockets.ClientSocket.requete(ClientSocket.java:30)06-12 08:25:17.244: E/MessageQueue-JNI(785):at ihm.IHM_Smartphone $ 1.onTouch(IHM_Smartphone.java:73)06-12 (785): 08:25:17.244:E/MessageQueue-JNI(785):at android.view.View.dispatchTouchEvent(View.java:7241)06-12 08:25:17.244:E/MessageQueue-JNI :在 机器人.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06- 12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 06-12 08:25:17.244:E/MessageQueue-JNI(785) ):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java :2174) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06-12 08:25:17.244:E /的MessageQueue-JNI(785):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 8月6日至一十二日:25:17.244:E /的MessageQueue-JNI(785) :at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java: 2174) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06-12 08:25:17.244:E/MessageQueue -JNI(785):at com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:1953) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.app.Activity.dispatchTouchEvent( Activity.java:2410)06-12 08:25:17.244:E/MessageQueue-JNI(785):at com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:1901) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.View.dispatchPointerEvent(View.java:7426)06-12 08:25:17.244:E/MessageQueue-JNI 785):at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewRootImpl.deliverInputEvent(ViewRootIm pl.java:3165) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292) 06-12 08:25:17.244 :E/MessageQueue-JNI(785):at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view .ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363) 06-12 08:25:17.244:E/MessageQueue-JNI(785):at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179) 06 -12 08:25:17.244:E/MessageQueue-JNI(785):at android.os.MessageQueue.nativePollOnce(Native Method)06-12 08:25:17。244:E/MessageQueue-JNI(785):at android.os.MessageQueue.next(MessageQueue.java:125)06-12 08:25:17.244:E/MessageQueue-JNI(785):at android。 os.Looper.loop(Looper.java:124)06-12 08:25:17.244: E/MessageQueue-JNI(785):at android.app.ActivityThread.main(ActivityThread.java:5041)06-12 08:25:17.244:E/MessageQueue-JNI(785):at java.lang.reflect.Method.invokeNative(Native Method)06-12 08:25:17.244:E/MessageQueue-JNI(785):在 java.lang.reflect.Method.invoke(Method.java:511)06-12 08:25:17.244: E/MessageQueue-JNI(785):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run(ZygoteInit.java:793) 06-12 08:25 :17.244:E/MessageQueue-JNI(785):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)06-12 08:25:17.244:E/MessageQueue-JNI(785) :at dalvik.system.NativeStart.main(Native Method)06-12 08:25:17.264: D/AndroidRuntime(785):关闭VM 06-12 08:25:17.264: W/dalvikvm(785) :threadid = 1:线程退出与未捕获的异常 (group = 0x40a71930)06-12 08:25:17.284:E/AndroidRuntime(785):致命 EXCEPTION:main 06-12 08:25:17.284:E/AndroidRuntime 785): android.os.NetworkOnMainThreadException 06-12 08:25:17.284: E/AndroidRuntime(785):at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 06-12 08: 25:17.28 4:E/AndroidRuntime(785):at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)06-12 08:25:17.284:E/AndroidRuntime(785):at libcore.io.IoBridge。 recvfrom(IoBridge.java:513)06-12 08:25:17.284: E/AndroidRuntime(785):at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)06-12 08:25:17.284 :E/AndroidRuntime(785):at java.net.PlainSocketImpl.access $ 000(PlainSocketImpl.java:46)06-12 08:25:17.284:E/AndroidRuntime(785):at java.net.PlainSocketImpl $ PlainSocketInputStream.read(PlainSocketImpl.java:240) 06-12 08:25:17.284:E/AndroidRuntime(785):at java.io.InputStreamReader.read(InputStreamReader.java:244)06-12(E)/安卓运行时间(785):在 java:08:25:17.284:E/AndroidRuntime(785):at java.io.BufferedReader.fillBuf(BufferedReader.java:130)06-12 08:25:17.284 .io.BufferedReader.readLine(BufferedReader.java:354)06-12 08:25:17.284:E/AndroidRuntime(785):at sockets.ClientSocket.requete(ClientSocket.java:30)06-12 08:25 :17.284: E/AndroidRuntime(785):在 ihm.IHM_Smartphone $ 1.onTouch(IHM_Smartphone.java:73)06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.View .dispatchTouchEvent(View.java:7241)06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06-12 08:25:17.284:E/AndroidRuntime(785): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06 -12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup。dispatchTransformedTouchEvent(ViewGroup.java:2174) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1875)06-12 08:25:17.284 :E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1875)06-12 08:25:17.284:E/AndroidRuntime(785):at com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:1953) 06 -12 08:25:17.284:E/AndroidRuntime(785):at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)(785):06-12 08:25:17.284:E/AndroidRuntime(785):at android.app.Activity.dispatchTouchEvent(Activity.java:2410)06-12 08:25:17.284:E/AndroidRuntime在 com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:1901) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.View.dispatchPointerEvent (View.java:7426)06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220) 06-12 08:25:17.284: E/AndroidRuntime(785):at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292) 06-12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271) 06 -12 08:25:17.284:E/AndroidRuntime(785):at android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363) 06-12 08:25:17.284:E/AndroidRuntime(785): android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179) 06-12 08:25:17.284:E/AndroidRuntime(785):at 08:25:17.284:E/AndroidRuntime(785):at android.os.MessageQueue.next(MessageQueue.java:125)06-12 08:25:17.284:E/AndroidRuntime(785):at android.os.Looper.loop(Looper.java:124)06-12 08:25:17.284: E/AndroidRuntime(785):at android .app.ActivityThread.main(ActivityThread.java:5041)06-12 08:25:17.284:E/AndroidRuntime(785):at java.lang.reflect.Method.invokeNative(Native Method)06-12 08 :25:17.284:E/AndroidRuntime(785):在 java.lang.reflect.Method.invoke(Method.java:511)06-12 08:25:17.284: E/AndroidRuntime(785):在 com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 06-12 08:25:17.284:E/AndroidRuntime(785):at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:560)06-12 08:25:17.284:E/AndroidRuntime(785):在 dalvik.system.NativeStart.main(本机方法)

蒙山的Jop的的编辑,我有:

public class ClientSocket extends Thread { 
private static Socket socket; 
private static BufferedReader in; 
private static PrintWriter out; 
private ReplyHandler cb; 

public ClientSocket(String nomSrv, int port) throws Exception { 
    socket = new Socket(nomSrv, port); 
    out = new PrintWriter(socket.getOutputStream(), true); 
    in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
} 



public static String requete(String msg) throws IOException { 
    out.println(msg); 
    String line = in.readLine(); 
    return line; 
} 

public static void fermeture() throws IOException{ 
    in.close(); 
    out.close(); 
    socket.close(); 
} 

public static interface ReplyHandler { 
    public void handleReply(String line); 
    // more methods, if you need them... (e.g., handleException) 

}; 

public String requete(String msg, ReplyHandler cb) throws IOException { 
    this.cb = cb; 
    out.println(msg); 
    return msg; 
} 

public void run() { 
    while(true) { 
     String line = null; 
     try { 
      line = in.readLine(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     cb.handleReply(line); 
    } 
} 
/*private Handler handler = new Handler() { 
    public void handleMessage(android.os.Message msg) { 
     if(msg.what == 0) { 
      monBouton.setText("C'est bon"); 
     } 
    }; 
};*/ 

}

+1

请发布错误堆栈。 – ozbek

+0

我添加了错误堆栈。 – user2473943

回答

0

您不能在主事件分派线程上使用网络基元,因为这可能会阻止UI。请参阅documentationother question

总之,您应该使用后台线程从套接字读取并在请求完成时执行回调。假设您更改以下ClientSocket为sketeched:

public class ClientSocket extends Thread { 

    public static interface ReplyHandler { 
     public void handleReply(String line); 
     // more methods, if you need them... (e.g., handleException) 
    }; 

    private ReplyHandler cb; 

    // ... 

    public static String requete(String msg, ReplyHandler cb) throws IOException { 
     this.cb = cb; 
     out.println(msg); 
    } 

    public void run() { 
     while(...) { 
      String line = in.readLine(); 
      cb.handleReply(line); 
     } 
    } 

您可以使用它像这样:

ClientSocket.requete("SC 05 "+String.valueOf(x), new ReplyHandler() { 
     public void handleReply(String line) { 
      Log.d("Message", "Message caméra envoyé"); 
     } 
    ); 

需要注意的是,使其工作,处理异常,启动线程,依此类推。特别是,您可能需要在接口上添加第二种方法来处理异常。

+0

所以我必须把这个“最终的TextView tvCamera”的线程,这应该工作? – user2473943

+0

我已经添加了在单独的线程中执行读取所需的代码草图。 – jop

+0

我有ReplyHandler无法解析为类型。然后ReplyHandler cb他们想创建一个类并且“this”.cb = cb;不能在静态环境中使用静态的,但我需要静态使用它... – user2473943