Java 通过在Android中改装使用实时货币转换API时出错

Java 通过在Android中改装使用实时货币转换API时出错,java,android,android-studio,http,retrofit,Java,Android,Android Studio,Http,Retrofit,//这是我的MainActivity.java ublic class MainActivity extends AppCompatActivity implements View.OnClickListener{ private static final String TAG = "MainActivity"; private TextView result; private EditText currency; private Button button; privat

//这是我的MainActivity.java

ublic class MainActivity extends AppCompatActivity implements View.OnClickListener{

private static final String TAG = "MainActivity";
private TextView result;
private EditText currency;
private Button button;
private static String BASE_URL = "https://api.currencyscoop.com/v1/";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(TAG, "onCreate: called");
    initViews();
    button.setOnClickListener(this);
}

public void initViews(){
    Log.d(TAG, "initViews: called");
    result = findViewById(R.id.result);
    currency = findViewById(R.id.amount);
    button = findViewById(R.id.button);
}

@Override
public void onClick(View v) {
    Log.d(TAG, "onClick: called");
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RetrofitClient retrofitClient = retrofit.create(RetrofitClient.class);
    Call<ConvertAmt> calling = retrofitClient.getConvertedValue("my_api_key","USD", "INR", currency.getText().toString());
    calling.enqueue(new Callback<ConvertAmt>() {
        @Override
        public void onResponse(Call<ConvertAmt> call, Response<ConvertAmt> response) {
            Log.d(TAG, "onResponse: called :----------------------> "+response.body().getResult());
        }

        @Override
        public void onFailure(Call<ConvertAmt> call, Throwable t) {
            Log.d(TAG, "onFailure: --------------> "+t.getStackTrace());
        }
    });
}
}

//这是我的追踪

2020-08-27 23:59:53.212 1471-1471/com.example.online_currency W/System.err: java.io.EOFException: End of input at line 1 column 1 path $
2020-08-27 23:59:53.212 1471-1471/com.example.online_currency W/System.err:com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1401) 2020-08-27 23:59:53.212 1471-1471/com.example.online_currency W/System.err:com.google.gson.stream.JsonReader.doPeek(JsonReader.java:549) 2020-08-27 23:59:53.212 1471-1471/com.example.online_currency W/System.err:com.google.gson.stream.JsonReader.peek(JsonReader.java:425) 2020-08-27 23:59:53.212 1471-1471/com.example.online_currency W/System.err:com.google.gson.internal.bind.ReflectTypeAdapterFactory$Adapter.read(ReflectTypeAdapterFactory.java:205) 2020-08-27 23:59:53.212 1471-1471/com.example.online_currency W/System.err:at reformation 2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:39) 2020-08-27 23:59:53.212 1471-1471/com.example.online_currency W/System.err:at reformation 2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27) 2020-08-27 23:59:53.213 1471-1471/com.example.online_currency W/System.err:at reformation2.OkHttpCall.parseResponse(OkHttpCall.java:223) 2020-08-27 23:59:53.213 1471-1471/com.example.online_currency W/System.err:at reformation 2.OkHttpCall$1.onResponse(OkHttpCall.java:121) 2020-08-27 23:59:53.213 1471-1471/com.example.online_currency W/System.err:at-okhttp3.RealCall$AsyncCall.execute(RealCall.java:206) 2020-08-27 23:59:53.213 1471-1471/com.example.online_currency W/System.err:at-okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 2020-08-27 23:59:53.213 1471-1471/com.example.online_currency W/System.err:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 2020-08-27 23:59:53.213 1471-1471/com.example.online_currency W/System.err:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
2020-08-27 23:59:53.213 1471-1471/com.example.online_currency W/System.err:at java.lang.Thread.run(Thread.java:761)

您期望的响应数据似乎与您正在映射的pojo不匹配 这就是你所期待的

public class ConvertAmt { 
 private double result;
}
实际反应是

{
    "meta": {
        "code": 200,
        "disclaimer": "Usage subject to terms: https://currencyscoop.com/terms"
    },
    "response": {
        "timestamp": 1598589131,
        "date": "2020-08-27",
        "from": "USD",
        "to": "INR",
        "amount": "10",
        "value": 738.1371942
    }
}
因此,您可以将pojo转换为

public class ConvertAmt { 
 private Map<String,Object> meta;
 private Map<String,Object> response;

}
公共类convertam{
私有地图元;
私有映射响应;
}
你可以得到这样的回答

Call<ConvertAmt> calling = retrofitClient.getConvertedValue("my_api_key","USD", "INR", currency.getText().toString());


calling.getResponse().get("amount");
calling=reformationclient.getConvertedValue(“my_api_key”、“USD”、“INR”、currency.getText().toString());
调用.getResponse().get(“金额”);

好了,现在完全明白了,那么我的客户端界面呢!是okayhey@saifali我刚刚得到了我想要的输出,但它在几秒钟内向我展示了这一点:“没有指定网络安全配置,使用平台默认值”,然后我得到了输出……该怎么做,但这不是一个与网络相关的错误
public class ConvertAmt { 
 private Map<String,Object> meta;
 private Map<String,Object> response;

}
Call<ConvertAmt> calling = retrofitClient.getConvertedValue("my_api_key","USD", "INR", currency.getText().toString());


calling.getResponse().get("amount");