【问题标题】:Users not displayed in recyclerView once i type in nickname一旦我输入昵称,用户就不会显示在 recyclerView 中
【发布时间】:2020-07-06 19:53:50
【问题描述】:

我正在使用 android studio (SDK 29) 用 java 制作一个 android 应用程序。一旦我进入搜索屏幕,就会显示所有用户。但是一旦我输入用户的昵称,他们就会消失,而不是显示我搜索过的那个。

我运行调试器以更好地了解正在发生的事情,一旦我在搜索字段中输入昵称,调试器就会显示以下消息:

W/Glide:未能找到 GeneratedAppGlideModule。您应该在应用程序中包含对 com.github.bumptech.glide:compiler 的 annotationProcessor 编译依赖项,并且 @GlideModule 注释的 AppGlideModule 实现或 LibraryGlideModules 将被静默忽略 I/censapplicio: 编译器分配 4MB 来编译 void android.widget.TextView.(android.content.Context, android.util.AttributeSet, int, int) I/AssistStructure:扁平化最终辅助数据:5580 字节,包含 1 个窗口,23 个视图 W/ExifInterface:停止读取文件,因为错误的偏移量可能导致无限循环:0 W/ExifInterface:停止读取文件,因为错误的偏移量可能导致无限循环:0 D/ViewRootImpl@7a531ea[UserProfile]: MSG_RESIZED: frame=[0,0][1080,2340] ci=[0,83][0,126] vi=[0,83][0,1003] or=1 W/Glide:加载失败,尺寸为 [131x131] com.bumptech.glide.load.engine.GlideException 类:加载资源失败 I/censapplicio: 编译器分配 4MB 来编译 void android.view.ViewRootImpl.performTraversals() 与目标VM断开连接,地址:'localhost:8603',传输:'socket'

这是我将 Glide 调用到适配器的代码行:

        Glide.with(mContext).load(user.getImage()).into(viewHolder.image_profile);

这是我的方法 SearchUsers():

private void searchUsers(String s){

    Query query = FirebaseDatabase.getInstance().getReference("Users").orderByChild("nickname")
            .startAt(s)
            .endAt(s+"\uf8ff");

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            mUsers.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                User user = snapshot.getValue(User.class);
                mUsers.add(user);
            }

            userAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

我检查了 10 多个可能的解决方案,但没有一个有效。

我不确定错误是来自代码本身还是与 Glide 的依赖关系相关的任何问题。

【问题讨论】:

  • 您没有生成 AppGlideModule。这可能会帮助你stackoverflow.com/a/46638213/10182897
  • 好的,谢谢,让我试试。我会及时通知你。
  • 抱歉,Ashish,我对 android studio 有点陌生,我并没有真正遵循链接的答案所说的内容。你能分步骤解释我必须做什么吗?我如何生成 AppGlideModule?我看到了 glide 的文档,但没有分步解释。提前感谢您,感谢您的关注。
  • 好的,我会发布适当的详细信息
  • 只要确保添加正确的滑翔模块代码

标签: java android search android-glide


【解决方案1】:

第一个导入注解:

repositories {
    mavenCentral()
}

dependencies {
    annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}

同步项目然后创建一个类

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public class GlideApp extends AppGlideModule {

}

然后,我构建/重建项目

正如我所见,您使用 firebase 商店使用以下 glidemodule :

@GlideModule
public class MyAppGlideModule extends AppGlideModule {

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
        // Register FirebaseImageLoader to handle StorageReference
        registry.append(StorageReference.class, InputStream.class,
                new FirebaseImageLoader.Factory());
    }
}

【讨论】:

  • 当我运行构建时,一旦我按照您的步骤在我的应用程序中创建了一个 Java 类,我就会收到这个错误:错误:重复类:com.example.lutescensapplication.GlideApp public final class GlideApp { It看起来我已经有一个滑翔应用程序。我将尝试使用您的其余代码。
  • 所以,显然我已经有了一个 GlideApp 类。然后我去创建 MyAppGlideModule。我导入了所有内容,但出现错误:new FirebaseImageLoader.Factory() Cannot resolve symbol FirebaseImageLoader
  • 我搞定了,但是当我在搜索栏中输入昵称时,仍然没有显示用户。
  • 并且“W/Glide: Load failed for with size [131x131] class com.bumptech.glide.load.engine.GlideException: Failed to load resource”在我点击后再次显示在调试器中搜索字段。
  • 我得到了搜索工作。我读到: .orderByChild("nickname") .startAt(s) .endAt(s+"\uf8ff");然后我在 for 循环中创建了一个 if: if(user.getNickname().toLowerCase().contains(s.toLowerCase())){ mUsers.add(user); } else { Toast.makeText(getContext(), "未找到用户", Toast.LENGTH_SHORT).show(); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2016-07-31
  • 2017-11-25
  • 2017-05-24
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多