程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了按转换按钮(带 API)使货币转换器应用程序崩溃大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决按转换按钮(带 API)使货币转换器应用程序崩溃?

开发过程中遇到按转换按钮(带 API)使货币转换器应用程序崩溃的问题如何解决?下面主要结合日常开发的经验,给出你关于按转换按钮(带 API)使货币转换器应用程序崩溃的解决方法建议,希望对你解决按转换按钮(带 API)使货币转换器应用程序崩溃有所启发或帮助;

我正在尝试为我的学校项目制作一个带有 API 的货币转换器。转换器被编码为 Fragment。每次我尝试按 button 转换一对时,应用程序都会崩溃。这是我得到的错误:

E/AndroIDRuntime: FATAL EXCEPTION: main
    Process: com.example.LulusApp,PID: 1675
    java.lang.NoSuchMethodError: No static method Metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.androID.art/javalib/core-oj.jar)
        at okhttp3.internal.Util.<clinit>(Util.java:87)
        at okhttp3.internal.Util.skipLeadingAsciiWhitespace(Util.java:321)
        at okhttp3.httpUrl$Builder.parse(httpUrl.java:1313)
        at okhttp3.httpUrl.get(httpUrl.java:917)
        at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:492)
        at com.example.LulusApp.Retrofit.RetrofitBuilder.getRetrofiTinstance(RetrofitBuilder.java:11)
        at com.example.LulusApp.CurrencyConverterFragment$1.onClick(CurrencyConverterFragment.java:53)
        at androID.vIEw.VIEw.performClick(VIEw.java:7448)
        at androID.vIEw.VIEw.performClickInternal(VIEw.java:7425)
        at androID.vIEw.VIEw.access$3600(VIEw.java:810)
        at androID.vIEw.VIEw$PerformClick.run(VIEw.java:28305)
        at androID.os.Handler.handleCallBACk(Handler.java:938)
        at androID.os.Handler.dispatchmessage(Handler.java:99)
        at androID.os.Looper.loop(Looper.java:223)
        at androID.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I/Process: Sending signal. PID: 1675 SIG: 9

这是我的CurrencyConverterFragment.java,万物互联:

public class CurrencyConverterFragment extends Fragment {


    public CurrencyConverterFragment() {
        // required empty public constructor
    }

    @OverrIDe
    public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceStatE) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_currency_converter,container,falsE);

        final EditText currencyamount = (EditText) vIEw.findVIEwByID(R.ID.currency_amount);
        final EditText currencyResult = (EditText) vIEw.findVIEwByID(R.ID.currency_result);
        final Spinner currencyFromDropdown = (Spinner) vIEw.findVIEwByID(R.ID.currency_from);
        final Spinner currencyToDropdown = (Spinner) vIEw.findVIEwByID(R.ID.currency_to);
        button buttonResult = (button) vIEw.findVIEwByID(R.ID.button_result);

        //Adding Functionality
        String[] dropDownList = {"USD","EUR","CHF"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),R.layout.support_simple_spinner_dropdown_item,dropDownList);
        currencyFromDropdown.setAdapter(adapter);
        currencyToDropdown.setAdapter(adapter);

        buttonResult.setonClickListener(new VIEw.onClickListener() {
            @OverrIDe
            public voID onClick(VIEw v) {
//Below is error line 53
                RetrofiTinterface retrofiTinterface = RetrofitBuilder.getRetrofiTinstance().create(RetrofiTinterface.class);
                Call<JsonObject> call = retrofiTinterface.getExchangeCurrency(currencyFromDropdown.getSELEctedItem().toString());
                call.enqueue(new CallBACk<JsonObject>() {
                    @OverrIDe
                    public voID onResponse(Call<JsonObject> call,Response<JsonObject> responsE) {
                        Log.d("response",String.valueOf(response.body()));
                        JsonObject res = response.body();
                        JsonObject conversion_rates = res.getAsJsonObject("conversion_rates");
                        double amount = Double.parseDouble(currencyamount.getText().toString());
                        double multiplIEr = Double.parseDouble(conversion_rates.get(currencyToDropdown.getSELEctedItem().toString()).toString());
                        double result = amount * multiplIEr;
                        currencyResult.setText(String.valueOf(result));
                    }

                    @OverrIDe
                    public voID onFailure(Call<JsonObject> call,Throwable t) {

                    }
                });
            }
        });




        return vIEw;
    }
}

这是包含 2 .xml layout、2 Spinner、Some EditTextTextVIEwbutton 文件:

<?xml version="1.0" enCoding="utf-8"?>
<ScrollVIEw xmlns:androID="http://scheR_795_11845@as.androID.com/apk/res/androID"
    xmlns:tools="http://scheR_795_11845@as.androID.com/tools"
    androID:layout_wIDth="match_parent"
    androID:layout_height="match_parent"
    androID:orIEntation="vertical"
    tools:context=".CurrencyConverterFragment">

    <linearLayout
        androID:layout_wIDth="match_parent"
        androID:layout_height="match_parent"
        androID:orIEntation="vertical">

        <TextVIEw
            androID:ID="@+ID/Converter_title"
            androID:layout_wIDth="wrap_content"
            androID:layout_height="wrap_content"
            androID:text="Currency Converter"
            androID:textSize="36dp"
            androID:textAppearance="@style/TextAppearance.AppCompat.Medium"
            androID:textcolor="?attr/colorPriMary"
            androID:layout_margin="20dp"
            androID:layout_gravity="center"/>

        <linearLayout
            androID:layout_wIDth="wrap_content"
            androID:layout_height="wrap_content"
            androID:orIEntation="vertical"
            androID:layout_gravity="center">

        <TextVIEw
            androID:layout_wIDth="wrap_content"
            androID:layout_height="wrap_content"
            androID:text="amount to be converted"
            androID:textSize="16dp"
            androID:textAppearance="@style/TextAppearance.AppCompat.Medium"
            androID:textcolor="?attr/colorPriMary"
            androID:layout_margin="20dp"/>

        <EditText
            androID:ID="@+ID/currency_amount"
            androID:layout_wIDth="250dp"
            androID:layout_height="40dp"
            androID:layout_gravity="center"
            androID:textcolor="?attr/colorPriMary"
            androID:layout_marginBottom="20dp"
            androID:layout_marginleft="20dp"
            androID:layout_marginRight="20dp"/>

        <TextVIEw
            androID:layout_wIDth="wrap_content"
            androID:layout_height="wrap_content"
            androID:text="From Currency:"
            androID:textSize="16dp"
            androID:textAppearance="@style/TextAppearance.AppCompat.Medium"
            androID:textcolor="?attr/colorPriMary"
            androID:layout_margin="20dp"/>

            <relativeLayout
                androID:layout_wIDth="wrap_content"
                androID:layout_height="wrap_content"
                androID:BACkground="@drawable/border_spinner_currency_converter"
                androID:layout_marginBottom="20dp"
                androID:layout_marginleft="20dp"
                androID:layout_marginRight="20dp">
                <Spinner
                    androID:layout_wIDth="250dp"
                    androID:layout_height="40dp"
                    androID:ID="@+ID/currency_from"
                    androID:layout_gravity="center"/>
            </relativeLayout>
        <TextVIEw
            androID:layout_wIDth="wrap_content"
            androID:layout_height="wrap_content"
            androID:text="To Currency:"
            androID:textSize="16dp"
            androID:textAppearance="@style/TextAppearance.AppCompat.Medium"
            androID:textcolor="?attr/colorPriMary"
            androID:layout_margin="20dp"/>

            <relativeLayout
                androID:layout_wIDth="wrap_content"
                androID:layout_height="wrap_content"
                androID:BACkground="@drawable/border_spinner_currency_converter"
                androID:layout_marginBottom="20dp"
                androID:layout_marginleft="20dp"
                androID:layout_marginRight="20dp">
                <Spinner
                    androID:layout_wIDth="250dp"
                    androID:layout_height="40dp"
                    androID:ID="@+ID/currency_to"
                    androID:layout_gravity="center"/>
            </relativeLayout>
        </linearLayout>
        <button
            androID:ID="@+ID/button_result"
            androID:layout_wIDth="wrap_content"
            androID:layout_height="wrap_content"
            androID:layout_margin="20dp"
            androID:layout_gravity="center"
            androID:text="Convert"
            androID:textcolor="#FFFFFF"
            androID:BACkground="@drawable/custom_button_currency_converter"/>

        <EditText
            androID:ID="@+ID/currency_result"
            androID:layout_wIDth="250dp"
            androID:layout_height="40dp"
            androID:layout_gravity="center"
            androID:layout_marginBottom="20dp"
            androID:layout_marginleft="20dp"
            androID:layout_marginRight="20dp"
            androID:hint="Result"/>

    </linearLayout>
</ScrollVIEw>

我使用的 API 的 RetrofitBuilder.java

public class RetrofitBuilder {
    private static Retrofit retrofit;
    public static Retrofit getRetrofiTinstance(){
        if(retrofit == null){
            retrofit = new Retrofit.builder()
//Below is error line 11:
                    .baseUrl("https://v6.exchangerate-API.com/v6/9b7aaded7a6b901a07526894/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

最后通过 interface@GET 转换为 @Path 特定货币。

public interface RetrofiTinterface {
    @GET("latest/{Currency}")
    Call<JsonObject> getExchangeCurrency(@Path("currency")String currency);
}

解决方法

改造类不是也不能是静态的。如果类是静态的,则不能包含任何非静态成员。这就是为什么运行时错误指出没有这样的静态方法。在 onCreate 方法中获取 Retrofit 实例,或者以 Context 为参数为 RetrofitBuilder 类创建一个构造函数方法。然后构建接口并在那里执行 .create(RetrofiTinterface.class);,而不是在外面。同样在类中添加一个 get() 方法,用于检索 Retrofit 实例,并在需要时从外部调用 new RetrofitBuilder(getApplicationContext()) 之类的类。

大佬总结

以上是大佬教程为你收集整理的按转换按钮(带 API)使货币转换器应用程序崩溃全部内容,希望文章能够帮你解决按转换按钮(带 API)使货币转换器应用程序崩溃所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: