小编Abh*_*sal的帖子

Android Studio 3.0 Canary 1注释处理器错误

刚刚升级到Android Studio 3.0,之前正在编译的项目会抛出以下错误

错误:java.lang.RuntimeException:现在必须显式声明注释处理器.发现编译类路径中的以下依赖项包含注释处理器.请将它们添加到annotationProcessor配置中.

但是,这following没有定义.这是我的build.gradle中的compile语句的样子

compile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
    transitive = true;
}

compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
compile 'com.jakewharton.timber:timber:4.4.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'io.reactivex:rxjava:1.0.14'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.jpardogo.googleprogressbar:library:1.2.0'
compile 'com.wang.avi:library:2.1.3'
compile 'link.fls:swipestack:0.3.0'
compile 'com.jakewharton:butterknife:8.4.0'
compile 'com.codemybrainsout.rating:ratingdialog:1.0.7'
compile 'org.greenrobot:greendao:3.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta5'
testCompile 'junit:junit:4.12'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
provided 'org.projectlombok:lombok:1.12.6'
Run Code Online (Sandbox Code Playgroud)

android android-studio android-gradle-plugin

19
推荐指数
2
解决办法
2万
查看次数

更改导航抽屉汉堡包图标

我正在尝试更改汉堡包菜单图标,NavigationView但我无法这样做.

这是我到目前为止所尝试的

我有一个基本活动,其中导航抽屉设置完成.这是相关的一段代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.activity_base_nav);
    setSupportActionBar(toolbar);
    setupDrawer();
}

private void setupDrawer() {
    mDrawerLayout.setDrawerListener(this);

    mDrawerToggle = new ActionBarDrawerToggle(this,
            mDrawerLayout,
            R.string.open,
            R.string.close);

    mDrawerToggle = new ActionBarDrawerToggle(mContext,
            mDrawerLayout,
            R.string.open,
            R.string.close);

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(false);
        mDrawerToggle.setDrawerIndicatorEnabled(false);
       mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_share_48pt_2x);
    }
    mDrawerToggle.syncState();

    mNavigationView.setNavigationItemSelectedListener(
            menuItem -> {
                mMenuItem = menuItem.getItemId();
                mDrawerUtil.onNavMenuItemClicked(mMenuItem);
                mDrawerLayout.closeDrawers();
                return true;
            });
}

@Override 
public void setContentView(int layoutResID) {
    getLayoutInflater().inflate(layoutResID, mContainer);
}


@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer android-toolbar hamburger-menu actionbardrawertoggle

11
推荐指数
2
解决办法
2万
查看次数

使用Firebase CLI shell测试可调用的云功能

我一直在尝试新的firebase可调用云功能,firebase functions:shell我继续得到以下错误

请求的内容类型不正确.

从功能收到的响应:400,{"error":{"status":"INVALID_ARGUMENT","message":"Bad Request"}}

这是我想在shell上调用此函数

myFunc.post(dataObject时)

我也尝试过这个

myFunc.post().表(dataObject时)

但后来我得到错误的编码(表单)错误.dataObject是有效的JSON.

更新:

我想我需要firebase serve用于本地仿真这些callable https功能.数据需要像这样在post请求中传递(注意它在data参数中的嵌套方式)

{
 "data":{
    "applicantId": "XycWNYxqGOhL94ocBl9eWQ6wxHn2",
    "openingId": "-L8kYvb_jza8bPNVENRN"
 }
}
Run Code Online (Sandbox Code Playgroud)

我无法想象的是如何通过REST客户端调用该函数时传递虚拟身份验证信息

node.js firebase google-cloud-functions firebase-cli

10
推荐指数
1
解决办法
3321
查看次数

Kotlin Flow 并行执行两个 API 调用,并在每个结果到达时收集它们

我正在尝试使用Kotlin Flows. 这是我现在正在尝试的

flowOf(
 remoteDataSource.getDataFromCache() // suspending function returning Flow<Data>
   .catch { error -> Timber.e(error) },
 remoteDataSource.getDataFromServer() // suspending function returning Flow<Data>
).flattenConcat().collect {
  Timber.i("Response Received")
}
Run Code Online (Sandbox Code Playgroud)

这里的问题collect是只在getDataFromServer返回时调用。我的期望是我应该在几毫秒后从缓存中获取第一个事件,然后从服务器获取第二个事件。在这种情况下,"Response Received"会打印两次,但会立即一个接一个地打印。

在此其他变体中,"Response Received"仅在getDataFromServer()返回后打印一次。

 remoteDataSource.getDataFromCache() // suspending function returning Flow<Data>
  .catch { error -> Timber.e(error) }
  .flatMapConcat {
    remoteDataSource.getDataFromServer() // suspending function returning Flow<Data>
  }
  .collect {
    Timber.i("Response Received")
  }
Run Code Online (Sandbox Code Playgroud)

Flowable.concat()之前使用过 RxJava ,它运行良好。Kotlin Flows 中是否有可以模拟这种行为的东西?

android reactive-programming kotlin kotlin-coroutines kotlin-flow

9
推荐指数
2
解决办法
4273
查看次数

ViewPager2 无法动态添加删除片段

在索引处删除/添加片段会导致 Viewpager2 出现意外行为。这是不可能的,ViewPager但预计可以与Viewpager2. 它会导致重复的片段和不同步TabLayout这是一个重现此问题的演示项目。有一个切换按钮可以删除片段并将其重新附加到特定索引处。在这种情况下,附加的片段应该是绿色的,但它是蓝色的,不知何故有 2 个蓝色片段。

这是我的适配器的外观

class ViewPager2Adapter(activity: FragmentActivity) : FragmentStateAdapter(activity) {
    val fragmentList: MutableList<FragmentName> = mutableListOf()

    override fun getItemCount(): Int {
        return fragmentList.size
    }

    override fun createFragment(position: Int): Fragment {
        return when (fragmentList[position]) {
            FragmentName.WHITE -> WhiteFragment()
            FragmentName.RED -> RedFragment()
            FragmentName.GREEN -> GreenFragment()
            FragmentName.BLUE -> BlueFragment()
        }
    }

    fun add(fragment: FragmentName) {
        fragmentList.add(fragment)
        notifyDataSetChanged()
    }

    fun add(index: Int, fragment: FragmentName) {
        fragmentList.add(index, fragment)
        notifyDataSetChanged()
    }

    fun remove(index: Int) …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-viewpager2

8
推荐指数
1
解决办法
2126
查看次数

类的静态数据成员是内部链接还是外部?

类中的静态数据成员(在C++中)将被视为内部链接还是外部链接?我做谷歌,但无法找到任何具体的静态成员变量.

c++ static static-members visual-c++

5
推荐指数
1
解决办法
601
查看次数

自定义导航视图菜单项之间的填充

是否可以自定义android设计支持库中菜单项之间的间距NavigationView

我的要求是创建一个子菜单,NavigationView其中菜单项之间的间距较小,然后是父菜单.

android navigation-drawer androiddesignsupport android-navigationview

5
推荐指数
1
解决办法
3405
查看次数

尝试上传大文件改造 2 时管道损坏

尝试使用改造 2.0 上传大型视频文件(~140mb)时,我在上传之间遇到以下异常。小文件运行良好。

javax.net.ssl.SSLException: Write error: ssl=0xb924ef28: I/O error during system call, Broken pipe
at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method)
at          com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:771)
at okio.Okio$1.write(Okio.java:80)
at okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
at okio.RealBufferedSink.write(RealBufferedSink.java:46)
at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:286)
at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
at okio.RealBufferedSink.writeAll(RealBufferedSink.java:104)
at okhttp3.RequestBody$3.writeTo(RequestBody.java:118)
at okhttp3.MultipartBody.writeOrCountBytes(MultipartBody.java:171)
at okhttp3.MultipartBody.writeTo(MultipartBody.java:113)
at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:704)
at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:563)
at okhttp3.RealCall.getResponse(RealCall.java:241)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
Run Code Online (Sandbox Code Playgroud)

这是我创建多部分/表单数据的方式

File originalFile = new File(attachment.getFilePath());
    RequestBody requestFile
            = RequestBody.create(MediaType.parse("multipart/form-data"), originalFile);
    MultipartBody.Part body
            = MultipartBody.Part.createFormData("file", attachment.getUuid(), requestFile);
    Call<ResponseBody> call
            = FileAPIProvider.getService().upload(attachment.getUuid(),
                                        attachment.getUuid(),
                                        attachment.getMimeType(),
                                        body,
                                        attachment.getVirtualPath());
Run Code Online (Sandbox Code Playgroud)

改装适配器设置

        builder.connectTimeout(30, TimeUnit.SECONDS);
    builder.readTimeout(60, TimeUnit.MINUTES);
    builder.writeTimeout(60, TimeUnit.MINUTES);

    // …
Run Code Online (Sandbox Code Playgroud)

android multipartform-data android-networking retrofit retrofit2

5
推荐指数
0
解决办法
2035
查看次数

使用boost :: asio :: read_some在TCP/IP中丢弃数据?

我已经使用了TCP服务器boost::asio.此服务器使用basic_stream_socket::read_some函数来读取数据.我知道这read_some并不能保证在返回之前提供的缓冲区已满.

在我的项目中,我发送的是由分隔符分隔的字符串(如果这很重要).在客户端我使用WinSock::send()函数发送数据.现在我的问题是在服务器端我无法获得从客户端发送的所有字符串.我怀疑是read_some因为某种原因接收了一些数据并丢弃了剩余的数据.然后再在下一次调用它接收另一个字符串.

在TCP/IP中真的可能吗?

我试图使用async_receive但是这会占用我所有的CPU,因为缓冲区必须通过回调函数清理它导致我的程序中出现严重的内存泄漏.(我IoService::poll()用来调用处理程序.与调用率相比,该处理程序的调用速度非常慢async_read()).

我再次尝试使用自由函数,read但这不能解决我的目的,因为它使用我提供的缓冲区大小来阻塞太多时间.

我以前的服务器实现是在WinSock API那里我可以使用的地方接收所有数据WinSock::recv().请给我一些线索,以便我可以使用获得完整的数据boost::asio.

这是我的服务器端线程循环

void 
TCPObject::receive()
{
    if (!_asyncModeEnabled)
    {
        std::string recvString;
        if ( !_tcpSocket->receiveData( _maxBufferSize, recvString ) )
        {
            LOG_ERROR("Error Occurred while receiving data on socket.");
        }
        else
            _parseAndPopulateQueue ( recvString );
    }
    else
    {
        if ( !_tcpSocket->receiveDataAsync( _maxBufferSize ) )
        {
            LOG_ERROR("Error Occurred while receiving data on socket.");
        }
    } …
Run Code Online (Sandbox Code Playgroud)

sockets network-programming boost-asio

3
推荐指数
1
解决办法
1698
查看次数

从 Google Play 安装应用程序时,Android 中的 AppLinks(已验证的深层链接)不起作用

我们为深层链接intent-filters定义了一些AndroidManifest。我们还有assetlinks.json文件放置在我们域中的适当位置,并带有正确的 SHA 指纹。我们面临一个奇怪的问题,当从 Android Studio 安装应用程序时,这些应用程序链接直接打开我们的应用程序,中间没有任何选择器。

这也是我们想要的行为,但是,当我们将我们的应用程序上传到 Google Play 并从那里下载时,这些应用程序链接App chooser首先打开,这不是我们想要的行为。

我们做了一些实验,比如为两个不同的链接创建不同的意图过滤器,删除一个链接等,但这种行为保持不变。还仔细检查了 SHA 指纹,它们似乎没问题。

android android-deep-link android-app-links

3
推荐指数
2
解决办法
830
查看次数