'ExceptionInInitializerError & IllegalStateException in RetrofitBuilder response
I was making a all type converter app but why am I getting ExceptionInInitializerError & IllegalStateException in RetrofitBuilder at .build() & in MainActivity at getRetrofitInstance() part. The line is below:
RetrofitInterface retrofitInterface;
retrofitInterface = RetrofitBuilder.getRetrofitInstance().create(RetrofitInterface.class);
In currency section API fetching is not working and moreover this is my first time using API.
The Errors:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nightxstudio.omniconverter, PID: 17635
java.lang.ExceptionInInitializerError
at okhttp3.internal.platform.Platform.get(Platform.java:85)
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
at retrofit2.Retrofit$Builder.build(Retrofit.java:614)
at com.nightxstudio.omniconverter.Retrofit.RetrofitBuilder.getRetrofitInstance(RetrofitBuilder.java:13)
at com.nightxstudio.omniconverter.MainActivity$2.onClick(MainActivity.java:117)
at android.view.View.performClick(View.java:7585)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View.performClickInternal(View.java:7541)
at android.view.View.access$3900(View.java:842)
at android.view.View$PerformClick.run(View.java:28875)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:255)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 30
at okhttp3.internal.platform.AndroidPlatform.buildIfSupported(AndroidPlatform.java:238)
at okhttp3.internal.platform.Platform.findPlatform(Platform.java:202)
at okhttp3.internal.platform.Platform.<clinit>(Platform.java:79)
at okhttp3.internal.platform.Platform.get(Platform.java:85)
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
at retrofit2.Retrofit$Builder.build(Retrofit.java:614)
at com.nightxstudio.omniconverter.Retrofit.RetrofitBuilder.getRetrofitInstance(RetrofitBuilder.java:13)
at com.nightxstudio.omniconverter.MainActivity$2.onClick(MainActivity.java:117)
at android.view.View.performClick(View.java:7585)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View.performClickInternal(View.java:7541)
at android.view.View.access$3900(View.java:842)
at android.view.View$PerformClick.run(View.java:28875)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:255)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
I/Process: Sending signal. PID: 17635 SIG: 9
Retrofit Builder class:
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitBuilder {
private static Retrofit retrofit;
public static Retrofit getRetrofitInstance(){
if(retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl("https://v6.exchangerate-api.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
Retrofit Interface:
import com.google.gson.JsonObject;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface RetrofitInterface {
@GET("v6/68b207579a140f89fd5b6c53/latest/{currency}")
Call<JsonObject> getExchangeCurrency(@Path("currency") String currency);
}
MainActivity:
calculate.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
resultHint.setVisibility(View.GONE);
valueEditText.onEditorAction(EditorInfo.IME_ACTION_DONE);
final double input = Double.parseDouble(valueEditText.getText().toString());
// Currency Conversions:-
if(typeDropDownText.getText().toString().equals("Currency")){
RetrofitInterface retrofitInterface;
retrofitInterface = RetrofitBuilder.getRetrofitInstance().create(RetrofitInterface.class);
Call<JsonObject> call = retrofitInterface.getExchangeCurrency(fromDropDownText.getOnItemClickListener().toString());
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
JsonObject res = response.body();
assert res != null;
JsonObject rates = res.getAsJsonObject("rates");
double currencyToBeConverted = Double.parseDouble(valueEditText.getText().toString());
currencyToBeConverted = Double.parseDouble(String.valueOf(valueEditText.getText()));
double multiplier = Double.parseDouble(rates.get(toDropDownText.getOnItemClickListener().toString()).toString());
amount = currencyToBeConverted * multiplier;
String amountString = String.valueOf(amount);
result.setText(amountString);
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
}
});
}
}
I had used InputTextLayout and AutoCompleteTextView for dropdown menu.
It's constantly stating problem primarily in RetrofitBuilder class at .build(); section. I have performed tons of changes but nothing worked. Please anyone help me out.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
