Использование socket.io в android приложениях
Добавлено: 11 ноя 2014, 18:01
Здравствуйте, решил написать приложение для андройда, которое обменивается данными с сервером node.js(socket.io), для чего использую библиотеку Gottox - https://github.com/Gottox/socket.io-java-client
Все хорошо работает, только есть одна проблема, не могу отправить запрос на сервер по нажатию кнопки(Button).
Привожу пример кода:
Среда разработки Eclipse, выдает следующую ошибку
Cannot refer to the non-final local variable socket defined in an enclosing scope
Вопрос, как мне по нажатию кпопки сделать запрос на сервер?
Все хорошо работает, только есть одна проблема, не могу отправить запрос на сервер по нажатию кнопки(Button).
Привожу пример кода:
Код: Выделить всё
package com.example.socketio_client;
import io.socket.IOAcknowledge;
import io.socket.IOCallback;
import io.socket.SocketIO;
import io.socket.SocketIOException;
import java.net.MalformedURLException;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SocketIO socket;
Button btn;
btn = (Button) findViewById(R.id.btn);
OnClickListener oclbtn = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
socket.send("Hello"); // Не работает
}
};
btn.setOnClickListener(oclbtn);
try{
System.out.println("Initializing Connection.");
socket = new SocketIO("http://192.168.56.100:8080/");
socket.connect
(
new IOCallback(){
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
System.out.println("Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(String data, IOAcknowledge ack) {
System.out.println("Server said: " + data);
}
@Override
public void onError(SocketIOException socketIOException) {
System.out.println("an Error occured");
socketIOException.printStackTrace();
}
@Override
public void onDisconnect() {
System.out.println("Connection terminated.");
}
@Override
public void onConnect() {
System.out.println("Connection established");
}
@Override
public void on(String event, IOAcknowledge ack, Object... args) {
System.out.println("Server triggered event '" + event + "'");
}
}
);
try {
// This line is cached until the connection is established.
System.out.println("Sending message to server.");
socket.send("user message");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.send("Hello"); // Так работает
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
}
}
Cannot refer to the non-final local variable socket defined in an enclosing scope
Вопрос, как мне по нажатию кпопки сделать запрос на сервер?