Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何修复';“表达式未使用”;这个::displayData“;在compositeDisposable.addAll(jsonApi.getData()';)中;?_Android_Kotlin_Android Recyclerview_Retrofit2_Rx Java2 - Fatal编程技术网

Android 如何修复';“表达式未使用”;这个::displayData“;在compositeDisposable.addAll(jsonApi.getData()';)中;?

Android 如何修复';“表达式未使用”;这个::displayData“;在compositeDisposable.addAll(jsonApi.getData()';)中;?,android,kotlin,android-recyclerview,retrofit2,rx-java2,Android,Kotlin,Android Recyclerview,Retrofit2,Rx Java2,我试图从API中获取一些数据,并使用改型和RxJava2显示这些数据。我是否正确使用CompositeDisposable.addall?当我说.subscribe{this::displayData}时,我指的是什么 因此,我尝试用.subscribe{cryptos->displayData(cryptos)}替换上面的.subscribe{…},但是遇到了编译时问题。我不知道当提到密码时我指的是什么。我以为这只是添加了“s”的模型类名(请不要问我为什么这么想)。我在.subscribe(订

我试图从API中获取一些数据,并使用改型和RxJava2显示这些数据。我是否正确使用CompositeDisposable.addall?当我说.subscribe{this::displayData}时,我指的是什么

因此,我尝试用.subscribe{cryptos->displayData(cryptos)}替换上面的.subscribe{…},但是遇到了编译时问题。我不知道当提到密码时我指的是什么。我以为这只是添加了“s”的模型类名(请不要问我为什么这么想)。我在.subscribe(订阅{this::displayData})中遇到的错误?是 retrocrypto0827\MainActivity.kt:(42,25):表达式未使用。我认为我没有正确引用接口。先谢谢你

MainActivity.kt

    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import androidx.recyclerview.widget.LinearLayoutManager
    import com.example.retrocrypto0827.Adapter.CryptoAdapter
    import com.example.retrocrypto0827.Model.Crypto
    import com.example.retrocrypto0827.RetrofitClient.IMyApi
    import com.example.retrocrypto0827.RetrofitClient.RetrofitClient
    import io.reactivex.android.schedulers.AndroidSchedulers
    import io.reactivex.disposables.CompositeDisposable
    import io.reactivex.schedulers.Schedulers
    import kotlinx.android.synthetic.main.activity_main.*

    class MainActivity : AppCompatActivity() {


        internal lateinit var jsonApi: IMyApi
        internal var compositeDisposable: CompositeDisposable = 
        CompositeDisposable()


        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

            // Init api
            val retrofit = RetrofitClient.instance
            jsonApi = retrofit.create(IMyApi::class.java)

            // View
            recycler_crypto.layoutManager = LinearLayoutManager(this)
            recycler_crypto.setHasFixedSize(true)
            fetchData()


        }

        private fun fetchData() {
            compositeDisposable.addAll(jsonApi.getData()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe {this::displayData})
        }

        private fun displayData(cryptoList: List<Crypto>) {

            val adapter = CryptoAdapter(this, cryptoList)
            recycler_crypto.adapter = adapter

        }


    }
修改客户端对象类

    import retrofit2.Retrofit
    import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
    import retrofit2.converter.gson.GsonConverterFactory

    object RetrofitClient {

        private var ourInstance: Retrofit?=null


        val instance: Retrofit
        get(){
            if(ourInstance == null){
                ourInstance = Retrofit.Builder()
                    .baseUrl("https://api.nomics.com/v1/")

     .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
            }
            return ourInstance!!
        }


    }
IMyApi接口

    import com.example.retrocrypto0827.Model.Crypto
    import io.reactivex.Observable
    import retrofit2.http.GET

    interface IMyApi {

        @GET("prices?key=yourapikey")
        fun getData(): Observable<List<Crypto>>
    }

我希望它按照我在recyclerview中的顺序显示我正在使用的API中的数据。只需简单显示该数据。

这是
消费者界面:

public interface Consumer<T> {
    /**
     * Consume the given value.
     * @param t the value
     * @throws Exception on error
     */
    void accept(T t) throws Exception;
}
因此,
::displayData
,该函数的引用未被使用

只需调用
.subscribe{displayData(it)}

这里有一个关于高阶函数的好例子

啊,还有。。。正如提示一样,您可以通过使用lazy的
以更简单、更惯用的方式将
改型
实例创建为单例

    object RetrofitClient {

        val instance: Retrofit by lazy {
            Retrofit.Builder()
                .baseUrl("https://api.nomics.com/v1/")

                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        }
    }

再次感谢你。我能够重新组织一切,阅读更多关于高阶函数的知识,并理解更多。
  class CryptoViewHolder(itemView: View):RecyclerView.ViewHolder(itemView) 
  {

            val txtCurrency = itemView.txtCurrency
            val txtPrice = itemView.txtPrice
        }
public interface Consumer<T> {
    /**
     * Consume the given value.
     * @param t the value
     * @throws Exception on error
     */
    void accept(T t) throws Exception;
}
.subscribe(
    object : Consumer<List<Crypto>> {
        override fun accept(t: List<Crypto>) {
             ::displayData
        }
    }
)
    object RetrofitClient {

        val instance: Retrofit by lazy {
            Retrofit.Builder()
                .baseUrl("https://api.nomics.com/v1/")

                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        }
    }