private void printQueryResult(Cursor cursor) { if (cursor != null) { et_contact.setText(""); while (cursor.moveToNext()) { String ID = cursor.getString(0); String stringName = cursor.getString(1); String phone = cursor.getString(2); et_contact.append("\n联系人ID:" + ID + "\n联系人姓名:" + stringName + "\n联系人电话:" + phone); } } cursor.close(); }
时间: 2024-02-14 15:07:11 浏览: 21
这是一段 Android 平台上的代码,它的作用是将查询结果打印到 EditText 组件上。判断查询结果是否为空,如果不为空,就遍历每一条结果,获取联系人 ID、姓名和电话,并将它们拼接成一段字符串,然后通过 append 方法添加到 EditText 上,最后关闭 Cursor。这段代码中用到了 Cursor 类,它表示数据库查询结果的指针,可以通过它来获取查询结果中的每一行数据。
相关问题
优化这段代码 private void showBeanInfo() { if (param != null) { bean = tokenDao.getBeanWithId(String.valueOf(param)); if (bean != null) { if (bean.getName() != null) { binding.edtTokenName.setText(bean.getName()); } if (bean.getTokenType() != null) { binding.tvTokenType.setText(bean.getTokenType()); } if (bean.getParamType() != null) { binding.tvTokenPara.setText(bean.getParamType()); } if (bean.getTokenBeanNew() != null) { if (bean.getTokenBeanNew().getAlgorithm() != null) { binding.tvTokenAlg.setText(bean.getTokenBeanNew().getAlgorithm()); } if (bean.getTokenBeanNew().getDigits() != null) { binding.tvTokenLength.setText(bean.getTokenBeanNew().getDigits() + "位"); } if (bean.getTokenBeanNew().getTimeInterval() != null) { binding.tvTokenPeriod.setText(bean.getTokenBeanNew().getTimeInterval() + "秒"); } } } } }
优化后的代码如下:
```java
private void showBeanInfo() {
if (param != null) {
bean = tokenDao.getBeanWithId(String.valueOf(param));
if (bean != null) {
BeanNew tokenBeanNew = bean.getTokenBeanNew();
if (bean.getName() != null) {
binding.edtTokenName.setText(bean.getName());
}
if (bean.getTokenType() != null) {
binding.tvTokenType.setText(bean.getTokenType());
}
if (bean.getParamType() != null) {
binding.tvTokenPara.setText(bean.getParamType());
}
if (tokenBeanNew != null) {
if (tokenBeanNew.getAlgorithm() != null) {
binding.tvTokenAlg.setText(tokenBeanNew.getAlgorithm());
}
if (tokenBeanNew.getDigits() != null) {
binding.tvTokenLength.setText(tokenBeanNew.getDigits() + "位");
}
if (tokenBeanNew.getTimeInterval() != null) {
binding.tvTokenPeriod.setText(tokenBeanNew.getTimeInterval() + "秒");
}
}
}
}
}
```
优化的改动:
1. 将 `bean.getTokenBeanNew()` 的结果存储在一个局部变量 `tokenBeanNew` 中,以避免多次访问。
2. 将内部的 `if` 条件判断和对应的设置操作进行重新组织,减少了嵌套的层级。
3. 通过直接访问 `tokenBeanNew` 的属性,避免了多次调用 `bean.getTokenBeanNew()`。
4. 对于可能为 `null` 的属性,添加了对应的空指针判断。
优化这个方法:private View getPopupWindowContentView(LayoutElementParcelable file) { // 一个自定义的布局,作为显示的内容 int layoutId = R.layout.popup_open_file_layout; // 布局ID View contentView = LayoutInflater.from(this).inflate(layoutId, null); // 点击重命名 contentView.findViewById(R.id.open_file_menu_rename).setOnClickListener(v -> { if (mPopupWindow != null) { mPopupWindow.dismiss(); } XLog.tag(TAG).i("popup click:rename"); checkDir(file, 0); }); // 点击删除 contentView.findViewById(R.id.open_file_menu_delete).setOnClickListener(v -> { if (mPopupWindow != null) { mPopupWindow.dismiss(); } XLog.tag(TAG).i("popup click:delete"); checkDir(file, 1); }); // 设置收藏按钮文字 收藏||取消收藏 String collectPath = ""; if (mCollects != null) { collectPath = mCollects.get(file.desc); } if (TextUtils.isEmpty(collectPath)) { collectPath = ""; } // 点击 收藏||取消收藏 TextView open_file_menu_collect = contentView.findViewById(R.id.open_file_menu_collect); String finalCollectPath = collectPath; open_file_menu_collect.setOnClickListener(v -> { if (mPopupWindow != null) { mPopupWindow.dismiss(); } if (finalCollectPath.equals(file.desc)) { XLog.tag(TAG).i("popup click:unCollect"); } else { XLog.tag(TAG).i("popup click:collect"); saveFileBrowseRecord(file); } }); if (collectPath.equals(file.desc)) { open_file_menu_collect.setText(getString(R.string.file_browser_un_collect)); } else { open_file_menu_collect.setText(getString(R.string.file_browser_collect)); } if (mTransferType == U_FTP_TO_FAB_FTP || mTransferType == FTP_U) { open_file_menu_collect.setVisibility(View.VISIBLE); } else { open_file_menu_collect.setVisibility(View.GONE); } return contentView; }
可以考虑对以下几个方面进行优化:
1. 使用静态内部类实现 OnClickListener,避免每次都创建新的对象。
2. 使用 Lambda 表达式替代匿名内部类,使代码更简洁。
3. 对于重复的逻辑可以进行方法封装,避免重复代码。
4. 对于重复的 View 查找,可以在方法外部进行缓存,避免重复查找。
5. 对于频繁调用的方法,可以使用局部变量进行缓存,避免多次调用。
下面是优化后的代码:
private View getPopupWindowContentView(LayoutElementParcelable file) {
// 一个自定义的布局,作为显示的内容
int layoutId = R.layout.popup_open_file_layout; // 布局ID
View contentView = LayoutInflater.from(this).inflate(layoutId, null);
// 点击重命名
contentView.findViewById(R.id.open_file_menu_rename).setOnClickListener(OnRenameClickListener.INSTANCE);
// 点击删除
contentView.findViewById(R.id.open_file_menu_delete).setOnClickListener(OnDeleteClickListener.INSTANCE);
// 点击 收藏||取消收藏
TextView open_file_menu_collect = contentView.findViewById(R.id.open_file_menu_collect);
open_file_menu_collect.setOnClickListener(OnCollectClickListener.INSTANCE);
// 设置收藏按钮文字 收藏||取消收藏
String collectPath = mCollects != null ? mCollects.get(file.desc) : "";
String collectText = collectPath.equals(file.desc) ? getString(R.string.file_browser_un_collect) : getString(R.string.file_browser_collect);
open_file_menu_collect.setText(collectText);
// 设置收藏按钮可见性
open_file_menu_collect.setVisibility(mTransferType == U_FTP_TO_FAB_FTP || mTransferType == FTP_U ? View.VISIBLE : View.GONE);
return contentView;
}
private static class OnRenameClickListener implements View.OnClickListener {
static final OnRenameClickListener INSTANCE = new OnRenameClickListener();
@Override
public void onClick(View v) {
if (mPopupWindow != null) {
mPopupWindow.dismiss();
}
XLog.tag(TAG).i("popup click:rename");
checkDir(file, 0);
}
}
private static class OnDeleteClickListener implements View.OnClickListener {
static final OnDeleteClickListener INSTANCE = new OnDeleteClickListener();
@Override
public void onClick(View v) {
if (mPopupWindow != null) {
mPopupWindow.dismiss();
}
XLog.tag(TAG).i("popup click:delete");
checkDir(file, 1);
}
}
private static class OnCollectClickListener implements View.OnClickListener {
static final OnCollectClickListener INSTANCE = new OnCollectClickListener();
@Override
public void onClick(View v) {
if (mPopupWindow != null) {
mPopupWindow.dismiss();
}
boolean isCollected = finalCollectPath.equals(file.desc);
String logText = isCollected ? "popup click:unCollect" : "popup click:collect";
XLog.tag(TAG).i(logText);
if (!isCollected) {
saveFileBrowseRecord(file);
}
}
}