Code Monkey home page Code Monkey logo

nim-uikit-android's Introduction

云信 IM UIKit 是基于网易云信 IM SDK 开发的一款即时通讯 UI 组件库,包括聊天、会话、圈组、搜索、群管理等组件。通过 IM UIKit,可快速集成包含 UI 界面的即时通讯应用。

IM UIKit 简化了基于 NIM SDK 的应用开发过程。它不仅能助您快速实现 UI 功能,也支持调用 NIM SDK 相应的接口实现即时通讯业务逻辑和数据处理。因此,您在使用 IM UIKit 时仅需关注自身业务或个性化扩展。

功能优势

优势 说明
UI 组件解耦 IM UIKit 不同组件可相互独立运行使用。您可按需选择组件,将其快速集成到您的应用,实现相应的 UI 功能,减少无用依赖。
UI 能力简洁易用 IM UIKit 的业务逻辑层与 UI 层相互独立。在 UI 层,您仅需关注视图展示和事件处理。IM UIKit 清晰的数据流转处理,让 UI 层代码更简洁易懂。
强大的自定义能力 IM UIKit 支持在各 UI 组件的初始化过程中配置自定义 UI。同时提供 Fragment 和 View 的能力封装,助您快速将 UI 功能添加到您的应用中。
完善的业务逻辑处理 IM UIKit 业务逻辑层提供完善的业务逻辑处理能力。您无需关心 SDK 层不同接口间的复杂处理逻辑,业务逻辑层一个接口帮您搞定所有。

技术原理

工作原理

IM UIKit 采用 (Model–View–ViewModel)MVVM 架构模型,实现 UI 展示与业务逻辑开发的相互独立。

IMuikitDataFlow_Android.png

流程 说明
1 IM UIKit 展示层的 Activity/Fragment/View 向响应层的 ViewModel 发送请求。
2 ViewModel 将请求经由业务逻辑层转发至 NIM SDK(网易云信 IM SDK)。
3 NIM SDK 接收请求后触发回调,回调数据经由业务逻辑层和响应层发送至 Activity/Fragment/View。
4 Activity/Fragment/View 将回调数据发送至 RecyclerViewAdapter。后者根据界面需要展示的不同实体的 type,判定具体的 UI 样式。例如,SDK 返回的回调数据为消息数据时,RecyclerViewAdapter 可判定消息数据中包含的消息类型(即 type),将消息在 UI 上展示为对应类型的样式。

产品架构

IMuikitArch.png

上图中:

  • UIKit UI 层的 ContactKit-uiChatKit-uiConversationKit-uiQChatKit-ui,对应上述工作原理图中的 Activity/Fragment/View。
  • UIKit UI 层的 ContactKitChatKit ConversationKitQChatKit,对应上述工作原理图中的 Repository。
  • UIKitCore 层对应上述工作原理图中的 Provider。

详见IM UIKit介绍

IM UIKit 集成

具体的集成流程,请参见快速集成 IM UIKit

nim-uikit-android's People

Contributors

javin-wang avatar ruanlin-yunxin avatar shine2008 avatar shuine avatar winniexuwen avatar xmuhuangjun avatar yeshuxin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nim-uikit-android's Issues

You need to use a Theme.AppCompat theme (or descendant) with the design library.

Caused by: java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library.
at android.support.design.widget.ThemeUtils.checkAppCompatTheme(ThemeUtils.java:36)
at android.support.design.widget.AppBarLayout.(AppBarLayout.java:151)
at java.lang.reflect.Constructor.newInstance(Native Method) 
at android.view.LayoutInflater.createView(LayoutInflater.java:619) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
at com.netease.nim.uikit.session.activity.BaseMessageActivity.onCreate(BaseMessageActivity.java:41) 
at com.netease.nim.uikit.session.activity.TeamMessageActivity.onCreate(TeamMessageActivity.java:69) 
at android.app.Activity.performCreate(Activity.java:6237) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
at cn.jiguang.a.a.c.a.a.d.callActivityOnCreate(Unknown Source) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

调用NimUIKit.init后doLogin收不到回调

如题,接入NimUIKit之前,可以正常登陆,接收RequestCallback回调。但是在Application中调用NimUIKit.init之后,便无法收到回调。可能是什么原因?

LICENSE?

請問這和 iOS 的 NIMKit 一樣,用的是 MIT 授權嗎?
因為是商業要使用,煩請補上授權宣告,謝謝!

Android 集成UI布局调用定制单聊异常

NimUIKit.startChatting(context, account, SessionTypeEnum.P2P, sessionCustomization);

private void UIKitPanel(String account) {

NimUIKit.startChatting(this, account, SessionTypeEnum.P2P, getsessionCustomization(), null);

}

/**

  • 封装聊天右侧按钮
  • @return
    */
    private SessionCustomization getsessionCustomization() {
    SessionCustomization sessionCustomization = new SessionCustomization();
    ArrayList<SessionCustomization.OptionsButton> buttons = new ArrayList<>();
    //定义右侧按钮
    SessionCustomization.OptionsButton cloudMsgButton = new SessionCustomization.OptionsButton() {
    @OverRide
    public void onClick(Context context, View view, String sessionId) {
    Toast.makeText(GoodDetailActivity.this, "测试", Toast.LENGTH_SHORT).show();
    }
    };

cloudMsgButton.iconId = R.drawable.ic_shopcar;
buttons.add(cloudMsgButton);
sessionCustomization.buttons = buttons;

return sessionCustomization;
}

异常信息:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.netease.nim.uikit.api.model.session.SessionCustomization) at android.os.Parcel.writeSerializable(Parcel.java:1527) at android.os.Parcel.writeValue(Parcel.java:1475) at android.os.Parcel.writeArrayMapInternal(Parcel.java:724) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) at android.os.Bundle.writeToParcel(Bundle.java:1157) at android.os.Parcel.writeBundle(Parcel.java:764) at android.content.Intent.writeToParcel(Intent.java:8687) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518) at android.app.Activity.startActivityForResult(Activity.java:4225) at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) at android.app.Activity.startActivityForResult(Activity.java:4183) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:732) at android.app.Activity.startActivity(Activity.java:4522) at android.app.Activity.startActivity(Activity.java:4490) at com.netease.nim.uikit.business.session.activity.P2PMessageActivity.start(P2PMessageActivity.java:52) at com.netease.nim.uikit.impl.NimUIKitImpl.startChatting(NimUIKitImpl.java:352) at com.netease.nim.uikit.api.NimUIKit.startChatting(NimUIKit.java:368) at com.njsoft.jcyy.activity.GoodDetailActivity.UIKitPanel(GoodDetailActivity.java:119) at com.njsoft.jcyy.activity.GoodDetailActivity.onViewClicked(GoodDetailActivity.java:103) at com.njsoft.jcyy.activity.GoodDetailActivity_ViewBinding$2.doClick(GoodDetailActivity_ViewBinding.java:56) at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: java.io.NotSerializableException: com.njsoft.jcyy.activity.GoodDetailActivity at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) at java.util.ArrayList.writeObject(ArrayList.java:734) at java.lang.reflect.Method.invoke(Native Method) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:977) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1536) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) at android.os.Parcel.writeSerializable(Parcel.java:1522) at android.os.Parcel.writeValue(Parcel.java:1475) at android.os.Parcel.writeArrayMapInternal(Parcel.java:724) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) at android.os.Bundle.writeToParcel(Bundle.java:1157) at android.os.Parcel.writeBundle(Parcel.java:764) at android.content.Intent.writeToParcel(Intent.java:8687) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518) at android.app.Activity.startActivityForResult(Activity.java:4225) at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) at android.app.Activity.startActivityForResult(Activity.java:4183) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:732) at android.app.Activity.startActivity(Activity.java:4522) at android.app.Activity.startActivity(Activity.java:4490) at com.netease.nim.uikit.business.session.activity.P2PMessageActivity.start(P2PMessageActivity.java:52) at com.netease.nim.uikit.impl.NimUIKitImpl.startChatting(NimUIKitImpl.java:352) at com.netease.nim.uikit.api.NimUIKit.startChatting(NimUIKit.java:368) at com.njsoft.jcyy.activity.GoodDetailActivity.UIKitPanel(GoodDetailActivity.java:119) at com.njsoft.jcyy.activity.GoodDetailActivity.onViewClicked(GoodDetailActivity.java:103) at com.njsoft.jcyy.activity.GoodDetailActivity_ViewBinding$2.doClick(GoodDetailActivity_ViewBinding.java:56) at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

没有消息通知

请问,两个人聊天怎么设置消息通知,现在在通知栏没有通知,不在聊天界面和最近联系人界面

加固后有些机子会闪退,不知道是不是so的问题

06-26 11:18:34.438 E/art (10421): Unexpected time out during dump checkpoint.
06-26 11:18:34.438 W/art (10421): Attempted to destroy barrier with non zero count -1
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] Runtime aborting...
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] Aborting thread:
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] "NIM-HT-MISC" prio=5 tid=32 Runnable
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] | group="" sCount=0 dsCount=0 obj=0x12c31be0 self=0x7f62dd0000
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] | sysTid=10491 nice=0 cgrp=default sched=0/0 handle=0x7f58ab4440
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] | state=R schedstat=( 64953309 27705227 86 ) utm=6 stm=0 core=5 HZ=100
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] | stack=0x7f589b2000-0x7f589b4000 stackSize=1037KB
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] | held mutexes= "abort lock" "mutator lock"(shared held)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #00 pc 0000000000489708 /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiPKcPNS_9ArtMethodEPv+236)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #1 pc 0000000000458ac4 /system/lib64/libart.so (_ZNK3art6Thread4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+220)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #2 pc 0000000000431e38 /system/lib64/libart.so (_ZNK3art10AbortState10DumpThreadERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEPNS_6ThreadE+44)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #3 pc 00000000004321b8 /system/lib64/libart.so (_ZN3art7Runtime5AbortEv+748)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #4 pc 00000000001361c4 /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+3136)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #5 pc 000000000053b2e0 /system/lib64/libart.so (artInvokeInterfaceTrampoline+1492)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #6 pc 000000000011d8a8 /system/lib64/libart.so (art_quick_invoke_interface_trampoline+104)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] native: #7 pc 0000000000044c38 /data/dalvik-cache/arm64/system@[email protected] (Java_java_lang_Throwable__0003cinit_0003e__Ljava_lang_String_2+156)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at java.lang.Throwable.(Throwable.java:95)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at java.lang.Error.(Error.java:48)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at java.lang.VirtualMachineError.(VirtualMachineError.java:46)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at com.netease.nimlib.avchat.k.b(unavailable:-1)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at com.netease.nimlib.avchat.plugin.Plugin.a(unavailable:-1)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at com.netease.nimlib.l.b.b(unavailable:-1)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at com.netease.nimlib.b.c(unavailable:-1)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at com.netease.nimlib.b.a(unavailable:-1)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at com.netease.nimlib.b$1.run(unavailable:-1)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at android.os.Handler.handleCallback(Handler.java:815)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at android.os.Handler.dispatchMessage(Handler.java:104)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at android.os.Looper.loop(Looper.java:207)
06-26 11:18:34.439 F/art (10421): art/runtime/runtime.cc:366] at android.os.HandlerThread.run(HandlerThread.java:61)

06-26 11:18:37.092 W/System.err(10570): java.lang.ClassNotFoundException: Didn't find class "com.tencent.StubShell.TxMeShell" on path: DexPathList[[dex file "/data/app/com.trainor.hsehome-1/oat/arm64/base.odex", dex file "/data/app/com.trainor.hsehome-1/oat/arm64/base.odex", zip file "/data/app/com.trainor.hsehome-1/base.apk"],nativeLibraryDirectories=[/data/app/com.trainor.hsehome-1/lib/arm64, /data/app/com.trainor.hsehome-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]
06-26 11:18:37.092 W/System.err(10570): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
06-26 11:18:37.092 W/System.err(10570): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
06-26 11:18:37.092 W/System.err(10570): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
06-26 11:18:37.092 W/System.err(10570): at com.tencent.StubShell.TxAppEntry.load(Native Method)
06-26 11:18:37.092 W/System.err(10570): at com.tencent.StubShell.TxAppEntry.a(Unknown Source)
06-26 11:18:37.092 W/System.err(10570): at com.tencent.StubShell.TxAppEntry.attachBaseContext(Unknown Source)
06-26 11:18:37.092 W/System.err(10570): at android.app.Application.attach(Application.java:199)
06-26 11:18:37.092 W/System.err(10570): at android.app.Instrumentation.newApplication(Instrumentation.java:1002)
06-26 11:18:37.092 W/System.err(10570): at android.app.Instrumentation.newApplication(Instrumentation.java:986)
06-26 11:18:37.092 W/System.err(10570): at android.app.LoadedApk.makeApplication(LoadedApk.java:582)
06-26 11:18:37.092 W/System.err(10570): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5174)
06-26 11:18:37.092 W/System.err(10570): at android.app.ActivityThread.-wrap3(ActivityThread.java)
06-26 11:18:37.092 W/System.err(10570): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
06-26 11:18:37.092 W/System.err(10570): at android.os.Handler.dispatchMessage(Handler.java:111)
06-26 11:18:37.092 W/System.err(10570): at android.os.Looper.loop(Looper.java:207)
06-26 11:18:37.092 W/System.err(10570): at android.app.ActivityThread.main(ActivityThread.java:5975)
06-26 11:18:37.092 W/System.err(10570): at java.lang.reflect.Method.invoke(Native Method)
06-26 11:18:37.092 W/System.err(10570): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
06-26 11:18:37.092 W/System.err(10570): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
06-26 11:18:37.092 W/System.err(10570): Suppressed: java.lang.ClassNotFoundException: com.tencent.StubShell.TxMeShell
06-26 11:18:37.093 W/System.err(10570): at java.lang.Class.classForName(Native Method)
06-26 11:18:37.093 W/System.err(10570): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
06-26 11:18:37.093 W/System.err(10570): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
06-26 11:18:37.093 W/System.err(10570): at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
06-26 11:18:37.093 W/System.err(10570): ... 17 more
06-26 11:18:37.093 W/System.err(10570): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

很奇怪,应用不加固能好好的,加固后在某些特定机子上会闪退,日志只看到这些,不知道是不是这个sdk的问题,因为我项目也没有导入其他的so库了。

使用java8,开启jack编译

application build.gradle配置***************

android {
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
         ......
        //开启jack编译
        **jackOptions {
            enabled true
        }**
    }
      ......
    compileOptions {
        sourceCompatibility **JavaVersion.VERSION_1_8**
        targetCompatibility **JavaVersion.VERSION_1_8**
    }
}

报错**************

> 06-29 17:16:08.157 21869-21869/com.netease.nim.demo E/AndroidRuntime: FATAL EXCEPTION: main
>                                                                       Process: com.netease.nim.demo, PID: 21869
>                                                                       java.lang.IllegalAccessError: Illegal class access: 'com.netease.nimlib.sdk.NIMClient' attempting to access 'com.netease.nimlib.r.g' (declaration of 'com.netease.nimlib.sdk.NIMClient' appears in /data/app/com.netease.nim.demo-1/base.apk)
>                                                                           at com.netease.nimlib.sdk.NIMClient.init(Unknown Source)
>                                                                           at com.netease.nim.demo.NimApplication.onCreate(NimApplication.java:68)
>                                                                           at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
>                                                                           at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5403)
>                                                                           at android.app.ActivityThread.-wrap2(ActivityThread.java)
>                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
>                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
>                                                                           at android.os.Looper.loop(Looper.java:154)
>                                                                           at android.app.ActivityThread.main(ActivityThread.java:6119)
>                                                                           at java.lang.reflect.Method.invoke(Native Method)
>                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
>                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

# 错误分析*****

qq 20170629173248

Program type already present: com.netease.nimlib.avchat.a.a.a.d

在空白项目导入uikit module后,报错啊
Program type already present: com.netease.nimlib.avchat.a.a.a.d
Message{kind=ERROR, text=Program type already present: com.netease.nimlib.avchat.a.a.a.d, sources=[Unknown source file], tool name=Optional.of(D8)}

gradle 4.4
插件: 3.1.3

请教这是什么原因?谢谢

Didn't find class "com.netease.nim.uikit.common.media.model.GenericFileProvider"

有的手机上不会报这个错,有的手机上报,这是什么原因啊?
java.lang.RuntimeException: Unable to get provider com.netease.nim.uikit.common.media.model.GenericFileProvider: java.lang.ClassNotFoundException: Didn't find class "com.netease.nim.uikit.common.media.model.GenericFileProvider" on path: DexPathList[[zip file "/mnt/asec/com.polaris.testcloud-1/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/com.polaris.testcloud-1/lib, /vendor/lib, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:5076)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4647)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4584)
at android.app.ActivityThread.access$1500(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1403)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5357)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.netease.nim.uikit.common.media.model.GenericFileProvider" on path: DexPathList[[zip file "/mnt/asec/com.polaris.testcloud-1/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/com.polaris.testcloud-1/lib, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.ActivityThread.installProvider(ActivityThread.java:5061)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4647) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4584) 
at android.app.ActivityThread.access$1500(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1403) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:193) 
at android.app.ActivityThread.main(ActivityThread.java:5357) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
at dalvik.system.NativeStart.main(Native Method) 

UIKit 复用

UIKit 中提供的功能跟sdk依赖性太强了!比如视频播放WatchVideoActivity,要求传一个IMMessage;如果我拿到的视频是我们服务端从云信历史聊天记录里拿到的地址;IMMessage无法直接构造,那我是不是得重新写一个视频播放的功能?

android studio 2.2rc2 使用jack compiler 编译出现的问题

android studio 2.2rc2 使用jack compiler 编译出现的问题

09-09 12:51:41.657 18228-18228/com.netease.nim.demo E/AndroidRuntime: FATAL EXCEPTION: main Process: com.netease.nim.demo, PID: 18228 java.lang.IllegalAccessError: Illegal class access: 'com.netease.nimlib.sdk.NIMClient' attempting to access 'com.netease.nimlib.r.g' (declaration of 'com.netease.nimlib.sdk.NIMClient' appears in /data/app/com.netease.nim.demo-2/base.apk) at com.netease.nimlib.sdk.NIMClient.init(Unknown) at com.netease.nim.demo.NimApplication.onCreate(NimApplication.java:68) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1015) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4815) at android.app.ActivityThread.access$1600(ActivityThread.java:168) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5643) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689)

怎么样解决呢?

拍照时提示获取图片出错

在一加3T中使用官方demo,聊天页面给对方发图片-选择拍照后点击对勾按钮时,提示获取图片出错,经设置log发现是由于PickImageActivity中Line205 :
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
错误为:java.lang.IllegalArgumentException: column '_data' does not exist
在其他手机中暂未出现这个问题,请问怎么解决?

聊天界面无法下拉刷新

第一个场景,第一次进入程序,打开聊天界面,下拉刷新,可以分页出N页的历史数据来,
第二个场景,删除程序,重新安装,也是第一次进入程序,打开聊天界面,关闭界面,再次打开聊天界面,下拉刷新,可以下拉出<N的页面,
于是想提问如何控制下拉刷新的?
第二种情况下拉的时候,getItemViewType不再执行,请问这是哪里控制的,按照原理来说只要用户下拉就可以一直下拉的?

如何让UI组件中的Activity不全屏

我看到AndroidManifest中有这样的注释:

UI组件中包含了语音选文字功能,该界面是全屏显示,为了视觉上的美观,该界面主题ActionBar使用Overlay模式。
             如果开发者不需要该功能或效果,使用普通主题即可。 同时,还需要将message_activity.xml这个layout中的根节点的paddingTop去掉。

但是我根本找不到message_activity.xml这个文件。

初始化失败 “ Didn't find class "com.netease.nrtc.engine.rawapi.IRtcEngine" ”

AS 3.1.2
compileSdkVersion: 26,
buildToolsVersion: '26.0.2',
minSdkVersion : 15,
targetSdkVersion :
nim-5.0.0

调用 NIMClient.init() 时,报以下错误

    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/netease/nrtc/engine/rawapi/IRtcEngine;
        at com.netease.nimlib.avchat.plugin.Plugin$1.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:776)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.netease.nrtc.engine.rawapi.IRtcEngine" on path: DexPathList[[zip file "/data/app/com.lxt.app-1/base.apk", zip file "/data/app/com.lxt.app-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.lxt.app-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.lxt.app-1/lib/arm, /data/app/com.lxt.app-1/base.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_dependencies_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_0_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_1_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_2_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_3_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_4_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_5_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_6_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_7_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_8_apk.apk!/lib/armeabi-v7a, /data/app/com.lxt.app-1/split_lib_slice_9_apk.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /system/vendor/lib, /product/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.netease.nimlib.avchat.plugin.Plugin$1.run(Unknown Source) 
        at java.lang.Thread.run(Thread.java:776) 

请问有啥解决思路吗?

build.gradle dependencies中的api未找到

把工程加入到我的项目里,提示 build.gradle 文件中的 dependencies 节点下的 api 未找到。

dependencies {
    api fileTree(dir: 'libs', include: '*.jar')
    api("com.android.support:appcompat-v7:${V7_APPCOMPAT_VERSION}")
    api("com.android.support:support-v4:${V4_SUPPORT_VERSION}")
    api("com.android.support:design:${DESIGIN_SUPPORT_VERSION}")
    api("com.android.support.constraint:constraint-layout:${CONSTRAIT_SUPPORT_VERSION}")

    api 'me.everything:overscroll-decor-android:1.0.4'
    api "me.leolin:ShortcutBadger:1.1.17@aar"

    api 'com.github.bumptech.glide:glide:4.2.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.2.0'
    api 'jp.wasabeef:glide-transformations:3.0.1'
    //api 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1' // if you want to use the Glide GPU Filters



}

群聊

如何设置群置顶?

愿意接受字串翻译的代码吗?

image
你可以参考图片上的代码,整个SDK很多地方直接用上了中文的string,比较恰当的方式应该全部都放到strings.xml的文件上的,指的是R.string

就算没有打算维护其他语言的翻译,但是如果全部都在strings.xml的话,对于用这个SDK并支持其它语言的APP,也相对容易维护

调用NimUIKit.init后doLogin,返回408

没接NimUIKit之前,可以正常登录。接入之后,再Application里也做了主进程判断,此时用sdk登录,返回登录超时 408. 此时即便再用NimUIKit提供的登录方式,仍然返回408

初始化后,调用登录接口报错... 无任何回调

7-1366/? I/ActivityManager: Start proc 8068:net.huayipai:core/u0a573 for service net.huayipai/com.netease.nimlib.service.NimService$Aux
03-17 00:33:42.717 8068-8068/? I/art: Late-enabling -Xcheck:jni
03-17 00:33:42.717 8068-8068/? I/art: Reinit property: dalvik.vm.checkjni= false
03-17 00:33:42.733 8068-8068/? D/ActivityThread: ActivityThread,attachApplication
03-17 00:33:42.734 1337-2692/? D/ActivityManager: ActivityManagerService,attachApplication,callingPid = 8068
03-17 00:33:42.736 8068-8075/? I/art: Debugger is no longer active
03-17 00:33:42.736 8068-8075/? I/art: Starting a blocking GC Instrumentation
03-17 00:33:42.742 494-1485/? I/gralloc: alloc_device_alloc:626: Alloc handle(0x7862e66600): interfmt=1, stride=64, size=4096, usage=0x100
03-17 00:33:42.751 494-504/? I/gralloc: alloc_device_free:648: Free handle(0x7862e66600)
03-17 00:33:42.804 8068-8068/? D/AndroidRuntime: Shutting down VM
03-17 00:33:42.805 8068-8068/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.huayipai:core, PID: 8068
java.lang.RuntimeException: Unable to bind to service com.netease.nimlib.service.NimService$Aux@cd86b5b with Intent { cmp=net.huayipai/com.netease.nimlib.service.NimService$Aux }: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.netease.nimlib.i.b.a.a(java.lang.String, java.lang.String)' on a null object reference
at android.app.ActivityThread.handleBindService(ActivityThread.java:3404)
at android.app.ActivityThread.-wrap3(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1664)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6577)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.netease.nimlib.i.b.a.a(java.lang.String, java.lang.String)' on a null object reference
at com.netease.nimlib.i.a.e(Unknown Source)
at com.netease.nimlib.ipc.d.a(Unknown Source)
at com.netease.nimlib.service.NimService$Aux.onBind(Unknown Source)
at android.app.ActivityThread.handleBindService(ActivityThread.java:3379)
at android.app.ActivityThread.-wrap3(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1664) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:156) 
at android.app.ActivityThread.main(ActivityThread.java:6577) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 
03-17 00:33:42.807 1337-5303/? E/ReportTools: This is not beta user build
03-17 00:33:42.807 8068-8068/? I/Process: Sending signal. PID: 8068 SIG: 9

调用手动登录接口, 没有回调, logcat输出service Timeout

2019-03-09 14:30:26.897 20204-20253/art.shuoshuo.app.nim_example D/[ui]main_conn: 1/doTimeout: count#0
2019-03-09 14:30:26.900 20204-20253/art.shuoshuo.app.nim_example D/[ui]main_conn: 1/doConnect: tag#main_conn count#1
2019-03-09 14:30:26.902 20204-20253/art.shuoshuo.app.nim_example W/[ui]main_conn: 1/doConnect: unbind & stop service#Intent { cmp=art.shuoshuo.app.nim_example/com.netease.nimlib.service.NimService (has extras) }
2019-03-09 14:30:26.910 20204-20253/art.shuoshuo.app.nim_example I/[ui]main_conn: 1/doConnect: start & bind service#Intent { cmp=art.shuoshuo.app.nim_example/com.netease.nimlib.service.NimService (has extras) }
2019-03-09 14:30:26.945 20204-20253/art.shuoshuo.app.nim_example D/[ui]aux_conn: 1/doTimeout: count#0

集成最近联系人

集成的最近联系人 , 如果app进程被意外杀死 , 自动登录之后离线的消息刷新不出来,手动登录之后离线消息会刷新出来。
NIMClient.getService(MsgService.class).queryRecentContacts().setCallback(new RequestCallbackWrapper<List>() {

                @Override
                public void onResult(int code, List<RecentContact> recents, Throwable exception) {
                    if (code != ResponseCode.RES_SUCCESS || recents == null) {
                        return;
                    }
                    loadedRecents = recents;

recents里边并没有离线的消息,是需要开发者自己手动添加进去吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.