Ich bin kein Experte in Android, so tut mir leid, wenn mein Problem scheint einfach. Ich habe die ganze letzte Nacht nachgeschlagen und konnte keine Lösung finden.onOptionsItemSelected nicht die aktualisierten Variablen
Grundsätzlich, wenn ich eine Taste, die ich im Menü habe, drücken, wird die onOptionsItemSelected-Methode aufgerufen, um einen Socket mit einem Server zu erstellen. Die IP und der Port, die zum Erstellen benötigt werden, haben jedoch die Anfangswerte (Null und Null).
Aus diesem Grund habe ich versucht SharedPreferences
mit dem remotePort
wie dem folgenden Code speichern:
public class PlayActivity
{
private static final String TAG = "PlayActivity";
private SocketClient thread;
private WebsocketPortClient websocketClient;
private static String remoteIP;
private static int remotePort;
...
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.play_main);
//request port
context = this;
websocketClient = new WebsocketPortClient(event.getID(), event.getTitle(), app.getMyCode());
initWebsocketClient();
...
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId()) {
case R.id.userComment:
...
break;
case R.id.userCamera: // Camera Button
if (flPreview.getVisibility() == View.VISIBLE) {
...
} else {
// Here I Get the IP and Port
SharedPreferences sharedPref = getSharedPreferences(getString(R.string
.preference_file_key),
Context.MODE_PRIVATE);
remoteIP = sharedPref.getString(getString(R.string.ip), "192.168.1.160");
remotePort = sharedPref.getInt(getString(R.string.port), 8880);
Log.e(TAG, "Connecting to the server: " + remoteIP + " on port: " + remotePort);
if (started) {
if (remoteIP == null) {
thread = new SocketClient(preview);
} else {
thread = new SocketClient(preview, remoteIP, remotePort);
}
started = false;
flPreview.setVisibility(View.VISIBLE);
cameraOnBtn.setIcon(R.drawable.act_user_camera_ov);
} else {
closeSocketClient();
reset();
}
}
break;
case android.R.id.home:
askFinish();
break;
}
return true;
}
private void initWebsocketClient()
{
assigned = new AtomicBoolean(false);
websocketClient.setListener(new WebsocketPortClient.WebsocketPortListener()
{
@Override
public void onPortAssigned(int port)
{
if (portRequester.isPortReceived()) {
SharedPreferences sharedPref = getSharedPreferences(getString(R.string
.preference_file_key),
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.clear();
editor.putInt(getString(R.string.port), portRequester.getAssignedPort());
editor.commit();
Log.e(TAG, "onPortAssigned: " + sharedPref.getInt(getString(R.string.port),
8880));
supportInvalidateOptionsMenu();
assigned.set(true);
}
}
});
}
...
}
Auch habe ich versucht, mit AtomicInteger
für die remotePort
aber es hat die gleichen Ergebnisse. Der Wert ist immer Null. Jetzt mit SharedPreferences
der Wert Ich habe die vorherigen gespeicherten Wert, wie Sie in diesem Protokoll sehen:
E/socketPort: connect(): ws://portassigner.net:8080/ControllerServer/actions
E/socketPort: jsonObj sent: {"action":"add","eventID":"542398d26b980","eventTitle":"테트","userID":"6da557b7d92"}
E/socketPort: jsonObj received: {"action":"add","id":0,"eventID":"542398d26b980","eventTitle":"테트","userID":"6da557b7d92","status":"Off","color":"color02","assignedPort":8680}
E/socketPort: Action: add
E/socketPort: Add Port: 8680
E/tya: Running: 4, Top: ComponentInfo{kseek.stime/kseek.stime.event.play.PlayActivity}
E/MediaPlayer: Should have subtitle controller already set
E/tya: EventLoadingActivity::Finish()
E/tya: GC_RECV << SC;I;542398d26b980:110:1/0/1/20000; :
E/PlayActivity: Connecting to the server: 192.168.1.160 on port: 8330
E/socket: java.net.ConnectException: failed to connect to /192.168.1.160 (port 8330) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)
Ich möchte wirklich wissen, wie die remotePort
Wert innerhalb des onOptionsItemSelected zu aktualisieren. Der Port wird mithilfe eines Listeners aktualisiert, der beim Erstellen der Aktivität erstellt wird. Danke Jungs für Ihre Hilfe im Voraus.
Haben Sie jemals den remotePort oder remoteIP eingestellt? Ich sehe, du liest es, schreibst es aber nie. Es wird den Standardwert haben, wenn Sie es nie an irgendwas setzen. – TheAnonymous010
zuerst ich sie in der 'onCreate()', wenn die Aktivität erstellt wird, dann, weil ich den Port muss ich einen Listener erstellen aktualisieren. Mein Protokoll zeigt, dass der Port aktualisiert und in 'sharedPref' gespeichert wurde. Aber wenn ich versuche, es zu lesen, habe ich eine andere Portnummer bekommen, wahrscheinlich von der kostbaren Ausführung. [Dies ist das Protokoll] (http://i.imgur.com/kHWo3bD.png) <- – Teocci
Sind Sie sicher, dass Sie 'apply()' oder 'commit()' aufrufen, nachdem Sie die SharedPreferences aktualisiert haben? – TheAnonymous010