gpt4 book ai didi

java - 在Android中使用JAVA在onFocusChange中使用AsyncTask

转载 作者:行者123 更新时间:2023-12-02 02:46:00 25 4
gpt4 key购买 nike

我在 onFocusChangeListener 中为 EditText 使用 AsyncTask。因此,如果值发生变化,它将转至 api 调用。

如果用户经常更改 edittext 值并且无法在 textview 中查看该值,该怎么办?

如何管理它以避免出现多个实例?

因为我需要立即获取结果,以便根据 EditText 值的变化将其显示在 textview 中。谢谢!

@Override
public void onFocusChange(View view, boolean b) {
if(!b){
Api api = new Api(MyActivity.this);
api.setHttpType(Api.HTTP_TYPE.GET);
api.setParams(null, "www.url.com");
api.responseCallBack(new Api.ResponseListener() {
@Override
public void jsonResponse(String result) {
try {
JSONObject jsonObject = new JSONObject(result.trim());
textView.setText(jsonObject.getString("response"));
} catch (Exception e) {
e.printStackTrace();

}


}
});
}
}

最佳答案

您可以使用 EditText.addTextChangedListener() 添加 TextWatcher 来获取更改,但是使用 AsyncTask 您无法避免多个实例。

唯一的解决方案是创建一个线程并在引发“TextWatcher.onTextChanged(..)”时向其发送请求。在这个新线程中,您可以执行同步 HTTP 调用,而不必担心延迟/阻塞线程。

TextWatcher.onTextChanged(CharSequence s, ...) {
if (mNewThreadHandler !) null) {
mNewThreadHandler.removeMessages(1); //remove all previously queued Message of same "1" type
//send/enqueue the newer "1" Message type
mNewThreadHandler.sendMessage(Message.obtain(mNewThreadHandler, 1, s));
}
}

处理线程:

Handler mNewThreadHandler = null;
new Thread() {
@Override
public void run() {
Looper.prepare();
mNewThreadHandler = new Handler(Looper.myLooper) {
@Override
public void handleMessage(@NonNull final Message message) {
switch (message.what) {
case: 1: {
Log.e(TAG, "__TEXT_CHANGED__");
...do Http request here...
}
}
}
}
Looper.loop();
}
}

关于java - 在Android中使用JAVA在onFocusChange中使用AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57144046/

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