小编Sai*_*Sai的帖子

如何在Kotlin Android中为数据类创建空构造函数

我在数据类中有10+参数,我想用空构造函数初始化数据类,并使用setter仅为少数参数设置值,并将对象传递给服务器.

data class Activity(
        var updated_on: String,
        var tags: List<String>,
        var description: String,
        var user_id: List<Int>,
        var status_id: Int,
        var title: String,
        var created_at: String,
        var data: HashMap<*, *>,
        var id: Int,
        var counts: LinkedTreeMap<*, *>,
)
Run Code Online (Sandbox Code Playgroud)

用法:

这样的事情很容易

                val activity =  Activity();
                activity.title = "New Computer"
                sendToServer(activity)
Run Code Online (Sandbox Code Playgroud)

但它需要在创建构造函数时传递所有参数.我怎样才能像上面这样简化?

                val activity =  Activity(null,null,null,null,null,"New Computer",null,null,null,null);
                sendToServer(activity)
Run Code Online (Sandbox Code Playgroud)

android kotlin

148
推荐指数
8
解决办法
6万
查看次数

应该有字幕控制器已经设置Mediaplayer错误Android

每当我播放媒体时,它都会在DDMS中显示警告 Should have subtitle controller already set

我的代码:

private void start() {
    mediaPlayer.start();

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

DDMS日志

应该已经设置了字幕控制器

信息/警告(2,0)

当我在Google上搜索时,甚至没有一个与之相关的主题.我怎样才能摆脱或禁用它?

android android-mediaplayer

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

Kotlin中ArrayList <String>()和mutableListOf <String>()之间的区别

private val repositories = mutableListOf<String>()

private val repositories = ArrayList<String>()
Run Code Online (Sandbox Code Playgroud)

两者都是可变的列表,那么什么是两个关键字的点mutableListOfArrayList

或者有什么重大区别?

kotlin

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

Kotlin Coroutines在Android中正确的方式

我正在尝试使用异步更新适配器内的列表,我可以看到有太多的样板.

这是使用Kotlin Coroutines的正确方法吗?

这可以更优化吗?

fun loadListOfMediaInAsync() = async(CommonPool) {
        try {
            //Long running task 
            adapter.listOfMediaItems.addAll(resources.getAllTracks())
            runOnUiThread {
                adapter.notifyDataSetChanged()
                progress.dismiss()
            }
        } catch (e: Exception) {
            e.printStackTrace()
            runOnUiThread {progress.dismiss()}
        } catch (o: OutOfMemoryError) {
            o.printStackTrace()
            runOnUiThread {progress.dismiss()}
        }
    }
Run Code Online (Sandbox Code Playgroud)

android coroutine async-await kotlin

38
推荐指数
4
解决办法
3万
查看次数

到目前为止,无法在Android上实现Gapless音频循环

我已经尝试了几乎所有方法,但是我无法在循环单个轨道之间实现无间隙音频播放,持续时间为10-15秒.

我尝试过的步骤失败了:

  1. 不同的音频文件格式.mp3 .wav .ogg使用 setLooping(true):

    MediaPlayer mp1 = MediaPlayer.create(MainActivity.this, R.raw.track1);
    mp1.setLooping(true);
    mp1.start();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建两个媒体播放器并使用setOnCompletionListener相同的循环逐个循环 无法循环无间隙.

  3. 使用setNextMediaPlayer(nextmp)它的工作方式,但只有两个循环是可能的.在完成前两个循环后,我们必须准备并重新开始.

    mp1.start();
    mp1.setNextMediaPlayer(mp2);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 更新: @Jeff Mixon的结果回答: Mediaplayer循环因Android错误而停止.Jeff Mixon工作正常,但之后只有10或20个循环,由于一些垃圾收集问题,Mediaplayers会立即停止离开日志,如下所示.我真的有点困在这里2年了.提前致谢.

    E/MediaPlayer(24311): error (1, -38)
    E/MediaPlayer(23256): Error(1,-1007)
    E/MediaPlayer(23546): Error (1,-2147483648)
    
    Run Code Online (Sandbox Code Playgroud)

android android-audiomanager

31
推荐指数
3
解决办法
6472
查看次数

Kotlin与之间的差异

不要withrun有唯一不同的语法相同的功能,或者是有之间的主要差异withrun

哪种方法适当?

adapter.run {
    notifyDataSetChanged()
    if (activityDetails.isEmpty())
        emptyText.visibility = View.VISIBLE
    else 
       emptyText.visibility = View.GONE
}


with(adapter){
   notifyDataSetChanged()
   if (activityDetails.isEmpty())
       emptyText.visibility = View.VISIBLE
   else 
       emptyText.visibility = View.GONE
}
Run Code Online (Sandbox Code Playgroud)

kotlin

28
推荐指数
2
解决办法
3688
查看次数

Android工作室重命名包后抛出没有找到匹配的客户端

我按照以下链接重命名包.重命名后,当我尝试构建项目时,android studio抛出错误就像.

Android Studio重命名包

错误:任务':app:processDebugGoogleServices'的执行失败.找不到包名称'com.example.app'的匹配客户端

android android-studio

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

Delegates.notNull和lateinit Kotlin之间的区别

我很困惑,看起来和工作非常相似.我应该去哪一个?

private var mMediaController by Delegates.notNull<MediaControllerCompat>()
Run Code Online (Sandbox Code Playgroud)

要么

lateinit private var mMediaController: MediaControllerCompat
Run Code Online (Sandbox Code Playgroud)

用法:

    @Subscribe
    fun connectToSession(token: MediaSessionCompat.Token) {
         mMediaController = MediaControllerCompat(activity, token)
         mMediaController.registerCallback(mMediaControllerCallback)
    }
Run Code Online (Sandbox Code Playgroud)

kotlin

24
推荐指数
2
解决办法
3836
查看次数

从Dialog窗口调用onContextItemSelected时不会触发它

Dialog dialog;

private void opendialog() {
    dialog = new Dialog(MainActivity.this);
    dialog.setContentView(R.layout.popup);
    dialog.setTitle(R.string.msettings);
    RelativeLayout reply_layout = (RelativeLayout) dialog
            .findViewById(R.id.reply_layout);
    final RelativeLayout ringtone_layout = (RelativeLayout) dialog
            .findViewById(R.id.ringtone_layout);
    registerForContextMenu(ringtone_layout);

    ringtone_layout.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            openContextMenu(ringtone_layout);
        }
    });
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Select The Action");
    menu.add(0, v.getId(), 0, "Edit");
    menu.add(0, v.getId(), 1, "Delete");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    System.out.println("Inside onContextItemSelected");
    return super.onContextItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

在Dialog中使用上下文菜单时,永远不会调用onContextItemSelected.我的代码有什么问题吗?提前致谢..

android android-dialog

14
推荐指数
1
解决办法
1172
查看次数

在kotlin中传递函数作为参数

我正在尝试将函数作为参数传递,但它抛出'Unit不能作为函数调用.提前致谢.

uploadImageToParse(imageFile, saveCall1())
uploadImageToParse(imageFile, saveCall2())
uploadImageToParse(imageFile, saveCall3())

private fun uploadImageToParse(file: ParseFile?, saveCall: Unit) {
        saveCall()//Throws an error saying 'Unit cannot be invoked as function'
} 
Run Code Online (Sandbox Code Playgroud)

kotlin

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