gpt4 book ai didi

java - 我想在连接到 websocket 时显示加载动画

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:40 24 4
gpt4 key购买 nike

我试图在连接到 Web 服务器时在我的应用程序中显示动画,这样用户就不会认为它已崩溃/卡住。

下面是代码中可能相关的部分:

private void waitForWebSocketConnect() {
long start = System.currentTimeMillis();
long end = start + 3*1000; // 3 seconds
while (!mWebSocketClient.isOpen()) {
try {
Thread.sleep(200);
if(System.currentTimeMillis() >= end){
throw new InterruptedException();
}
} catch (InterruptedException e) {
fatalError("WebSocket did not connect. Please try again.");
}
}
}

我认为这也可能有用:

private void connectWebSocket() {

final Activity faActivity = super.getActivity();

URI uri;
try {
String uriString;
if(isRegistering){
//uriString = "ws://app.touchtechpayments.com:80/reg";
uriString = "wss://ec2-52-16-13-241.eu-west-1.compute.amazonaws.com/reg";
} else {
//uriString = "ws://app.touchtechpayments.com:80/trans";
uriString = "wss://ec2-52-16-13-241.eu-west-1.compute.amazonaws.com/trans";
}
Log.d("uriString", uriString);
uri = new URI(uriString);
} catch (URISyntaxException e) {
e.printStackTrace();
return;
}

mWebSocketClient = new WebSocketClient(uri) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
this.progressBar.setVisibility(View.GONE);
Log.d("Websocket", "Opened");
}

@Override
public void onMessage(String s) {
Log.d("Websocket", "Received message " + s);

if(isRegistering) {
confirmRegistration(s);
} else {
confirmTransaction(s);
}

}

@Override
public void onClose(int i, String s, boolean b) {
Log.d("Websocket", "Closed " + s);

if(!allDone) {

if (triedTwice) {

final String printToast = "Error received: " + s + "\nPlease try again.";

faActivity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(context, printToast, Toast.LENGTH_LONG).show();
faActivity.getFragmentManager().popBackStack();
}
});

} else {

Log.d("Websocket", "Trying for second time.");

triedTwice = true;
if (lastInputToServer != null) {
setupSSL();

connectWebSocket();
waitForWebSocketConnect();

mWebSocketClient.send(lastInputToServer);

}

}
}
}

@Override
public void onError(Exception e) {
this.progressBar.setVisibility(View.GONE);
Log.d("Websocket", "Error " + e.getMessage());
}
};

setupSSL();
mProgressBar.setVisibility(View.VISIBLE);
mWebSocketClient.connect();
}

webSocketClient 实际上并没有在 onCreate() 中定义,但是上面的方法无论如何都在 onCreate() 中使用。

最佳答案

首先在您的 layout.xml 中定义一个 ProgressBar 并使用 indeterminate 参数启用不确定模式:

<ProgressBar  
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:indeterminate = "true"/>

一旦建立了 websocket 连接,就隐藏你的 progressBar:

public void onCreate(){

[...]

mProgressBar = (ProgressBar) findViewById(R.id.progressBar);

mWebSocketClient = new WebSocketClient(uri) {

@Override
public void onOpen(ServerHandshake serverHandshake){
this.progressBar.setVisibility(View.GONE); // or INVISIBLE
}
@Override
public void onMessage(String s) {

}

@Override
public void onClose(int i, String s, boolean b) {
}
@Override
public void onError(Exception e) {
this.progressBar.setVisibility(View.GONE); // or INVISIBLE
}
};

mProgressBar.setVisibility(View.VISIBLE);
mWebSocketClient.connect();
}

您还可以将 ProgressBar 定义为不可见,稍后在 mWebSocketClient.connect() 调用之前显示。

附言我在这个例子中使用了这个 java websocket 库

dependencies {
compile "org.java-websocket:Java-WebSocket:1.3.0"
}

关于java - 我想在连接到 websocket 时显示加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com