我刚开始学习 kotlin,我的第一个应用程序使用 Retrofit2 和 Coroutine,但是有问题。我有一些错误,但是通过协程,堆栈跟踪的信息非常差。也许有人会发现错误或知道 hot 以使堆栈跟踪信息更丰富。
服务:
const val API_KEY = "Bcae2032bb596c73b10bdab625c037da"
interface CurrencyApi {
//https://api.currencystack.io/currency?base=USD&target=EUR&apikey=Bcae2032bb596c73b10bdab625c037da
@GET("currency")
fun getCurrentCurrency(
@Query("base") base: String,
@Query("target") target: String
): Deferred<Currency>
companion object {
operator fun invoke(): CurrencyApi {
val requestInterceptor = Interceptor { chain ->
val url = chain.request()
.url()
.newBuilder()
.addQueryParameter("key", API_KEY)
.build()
val request = chain.request()
.newBuilder()
.url(url)
.build()
return@Interceptor chain.proceed(request)
}
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(requestInterceptor)
.build()
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl("https://api.currencystack.io/")
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(CurrencyApi::class.java)
}
}
Run Code Online (Sandbox Code Playgroud)
活动:
class …Run Code Online (Sandbox Code Playgroud) 我想在片段中使用onClick方法,但数据绑定看不到方法。
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
FragmentTodayBinding fragmentTodayBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_today, container, false);
View view = fragmentTodayBinding.getRoot();
final MainViewModel mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
fragmentTodayBinding.setMainViewModel(mainViewModel);
fragmentTodayBinding.searchButton.setOnClickListener(this::onSearchClick);
});
return view;
}
@Override
public void onSearchClick(View v) {
mainViewModel.getCity();
Toast.makeText(getActivity(), "X", Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
按钮xml:
<Button
android:id="@+id/search_button"
android:onClick="@{(v)-> todayFragmentInterface.onSearchClick(v)}"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentEnd="true"
android:layout_marginEnd="10dp"
android:layout_marginTop="5dp"
android:background="@drawable/ic_search_white_24dp" />
Run Code Online (Sandbox Code Playgroud)
如何正确使用它的片段?