2015-06-11 85 views
0
package com.example.chat;  //client for a server 


import java.net.URI; 
import java.net.URISyntaxException; 
import org.java_websocket.client.WebSocketClient; 
import org.java_websocket.handshake.ServerHandshake; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

    private Button b1; 
    private EditText t1,t2; 
    public StringBuffer str=new StringBuffer(); 
    public WebSocketClient mWebSocketClient; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     try { 
      connectWebSocket(); 
     } catch(Exception e){ 
      e.printStackTrace(); 
     } 
     runWebSocket(); 
    } 

    public void runWebSocket(){ 
     b1=(Button)findViewById(R.id.button1); 
     t1=(EditText)findViewById(R.id.editText1); 
     t2=(EditText)findViewById(R.id.editText2); 

     str.insert(0,""); 
     b1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       sendNewMessage(v); 
      } 
     }); 
    } 

    public void connectWebSocket() { 
     URI uri; 
     try { 
      uri = new URI("ws://192.168.10.77:8080/Chat/EchoAnnotation"); 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
      return; 
     } 

     mWebSocketClient = new WebSocketClient(uri) { 
      @Override 
      public void onOpen(ServerHandshake serverHandshake) { 
       Log.i("Websocket", "Opened"); 
       mWebSocketClient.send("hello server"); 
       str.append("hello server \n"); 

       t2.setText(str); 
      } 

      @Override 
      public void onMessage(String s) { 
       final String message = s; 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         str.append("Server says: " + message+ "\n"); 
         t2.setText(str); 
        } 
       }); 
      } 

      @Override 
      public void onClose(int i, String s, boolean b) { 
       Log.i("Websocket", "Closed " + s); 
       str.append("WebSocket is closed"); 
       t2.setText(str); 
      } 

      @Override 
      public void onError(Exception e) { 
       Log.i("Websocket", "Error " + e.getMessage()); 
       str.append("there is some error in the WebSocket"); 
       t2.setText(str); 
      } 
     }; 
     mWebSocketClient.connect(); 
    } 

    public void sendNewMessage(View view){ 
     str.append("Client says: "+t1.getText().toString()+"\n"); 
     mWebSocketClient.send(t1.getText().toString()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

的logcat:的WebSocket似乎並沒有連接

 
06-11 05:08:01.601: W/dalvikvm(1045): Unable to resolve superclass of Lcom/example/chat/MainActivity$2; (1380) 
06-11 05:08:01.601: W/dalvikvm(1045): Link of class 'Lcom/example/chat/MainActivity$2;' failed 
06-11 05:08:01.601: E/dalvikvm(1045): Could not find class 'com.example.chat.MainActivity$2', referenced from method com.example.chat.MainActivity.connectWebSocket 
06-11 05:08:01.601: W/dalvikvm(1045): VFY: unable to resolve new-instance 1262 (Lcom/example/chat/MainActivity$2;) in Lcom/example/chat/MainActivity; 
06-11 05:08:01.601: D/dalvikvm(1045): VFY: replacing opcode 0x22 at 0x0007 
06-11 05:08:01.641: I/dalvikvm(1045): Could not find method org.java_websocket.client.WebSocketClient.send, referenced from method com.example.chat.MainActivity.sendNewMessage 
06-11 05:08:01.641: W/dalvikvm(1045): VFY: unable to resolve virtual method 9762: Lorg/java_websocket/client/WebSocketClient;.send (Ljava/lang/String;)V 
06-11 05:08:01.641: D/dalvikvm(1045): VFY: replacing opcode 0x6e at 0x0030 
06-11 05:08:01.641: W/dalvikvm(1045): Unable to resolve superclass of Lcom/example/chat/MainActivity$2; (1380) 
06-11 05:08:01.651: W/dalvikvm(1045): Link of class 'Lcom/example/chat/MainActivity$2;' failed 
06-11 05:08:01.661: D/dalvikvm(1045): DexOpt: unable to opt direct call 0x24e7 at 0x09 in Lcom/example/chat/MainActivity;.connectWebSocket 
06-11 05:08:02.221: D/dalvikvm(1045): GC_FOR_ALLOC freed 104K, 5% free 3261K/3432K, paused 38ms, total 40ms 
06-11 05:08:02.251: D/AndroidRuntime(1045): Shutting down VM 
06-11 05:08:02.251: W/dalvikvm(1045): threadid=1: thread exiting with uncaught exception (group=0xb1a83ba8) 
06-11 05:08:02.251: E/AndroidRuntime(1045): FATAL EXCEPTION: main 
06-11 05:08:02.251: E/AndroidRuntime(1045): Process: com.example.chat, PID: 1045 
06-11 05:08:02.251: E/AndroidRuntime(1045): java.lang.NoClassDefFoundError: com.example.chat.MainActivity$2 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at com.example.chat.MainActivity.connectWebSocket(MainActivity.java:67) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at com.example.chat.MainActivity.onCreate(MainActivity.java:35) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.app.Activity.performCreate(Activity.java:5231) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.os.Handler.dispatchMessage(Handler.java:102) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.os.Looper.loop(Looper.java:136) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at android.app.ActivityThread.main(ActivityThread.java:5001) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at java.lang.reflect.Method.invoke(Method.java:515) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
06-11 05:08:02.251: E/AndroidRuntime(1045):  at dalvik.system.NativeStart.main(Native Method) 
06-11 05:08:07.281: I/Process(1045): Sending signal. PID: 1045 SIG: 9 

回答

0

這似乎爲org.java_websocket.client.WebSocketClient庫不可用:

的logcat的消息

Unable to resolve superclass of Lcom/example/chat/MainActivity$2;

java.lang.NoClassDefFoundError: com.example.chat.MainActivity$2

表明匿名類要創建在這段代碼

mWebSocketClient = new WebSocketClient(uri) { 
    ... 
} 

無法創建,因爲WebSocketClient類的定義沒有被發現。

一些答案表明,你應該檢查你的構建路徑設置:

  • 在Eclipse中,確保Android的私家藏書檢查出口(12
  • 在Android Studio中,確保圖書館在路上;請從上下文菜單中選擇添加爲文件夾3
+0

您有解決方法嗎? – GingerHead

+0

我不知道解決方法,但將類庫添加到類路徑將是一個解決方案。我已經相應地調整了答案。 – Kariem

相關問題