<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.currencyconversion">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.CurrencyConversion"
android:usesCleartextTraffic="true"
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
package com.example.currencyconversion;
import androidx.appcompat.app.AppCompatActivity;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import com.example.currencyconversion.Retrofit.RetrofitBuilder;
import com.example.currencyconversion.Retrofit.RetrofitInterface;
import com.google.gson.JsonObject;
public class MainActivity extends AppCompatActivity {
Button button;
EditText currencyToBeConverted;
EditText currencyConverted;
Spinner convertToDropdown;
Spinner convertFromDropdown;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialization
currencyConverted =(EditText) findViewById(R.id.currency_converted);
currencyToBeConverted =(EditText) findViewById(R.id.currency_to_be_converted);
convertToDropdown = (Spinner) findViewById(R.id.convert_to);
convertFromDropdown = (Spinner) findViewById(R.id.convert_from);
button = (Button) findViewById(R.id.button);
// Adding Functionality
String[] downDownList = {"USD", "AED", "EUR", "GBP"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, downDownList);
convertToDropdown.setAdapter(adapter);
convertFromDropdown.setAdapter(adapter);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//API Call
RetrofitInterface retrofitInterface = RetrofitBuilder.getRetrofitInstance().create(RetrofitInterface.class);
//Call<JsonObject> call = retrofitInterface.getExchangeCurrency(convertFromDropdown.getSelectedItem().toString());
Call<JsonObject> call = retrofitInterface.getExchangeCurrency("AED");
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
Log.d("response", String.valueOf(response.body())); //HERE IS WHERE I DEBUG
/*JsonObject res = response.body();
JsonObject rates = res.getAsJsonObject("conversion_rates");
double currency = Double.valueOf(currencyToBeConverted.getText().toString());
double multiplier = Double.valueOf(rates.get(convertToDropdown.getSelectedItem().toString()).toString());
double result = currency * multiplier;
currencyConverted.setText(String.valueOf(result));*/
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
}
});
}
});
}
package com.example.currencyconversion.Retrofit;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitBuilder {
public 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;
}
}
package com.example.currencyconversion.Retrofit;
import com.google.gson.JsonObject;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface RetrofitInterface {
@GET("v6/4API-KEY/latest/{currency}")
Call<JsonObject> getExchangeCurrency(@Path("currency") String currency);
}
您查看了您正在调用的GET请求的JSON响应体吗?层级是什么样子的,你要按照层级去做
它是一个对象数组,一个对象中的一个对象,键和值对所在的位置吗?
名称:“Eimanalw”
在jsonObject类中,是否将变量命名为Name而不是Name
最后,如果更改了字符并将其命名为Name,是否使用了
@Serializable(“name”) //annotation
String Name;
我正在使用下载管理器从互联网下载文件。在Android6,8.1中下载成功,但在Android9.0中下载失败
问题内容: 我对android 7.0.0有一些问题。 我为我的应用程序使用了volley库,除了Android 7.0以外,它都运行良好 这是我的代码的一部分; 如果我在Android 7.0上测试我的应用程序,则控制台的输出为: D / NetworkSecurityConfig:未使用平台默认I / Choreographer指定网络安全配置:跳过127帧!该应用程序可能在其主线程上做过多的
我试图配置logback-classic来处理以下情况:所有来自My.class的、级别为debug或更高的消息都应该发送到stdout appender。 和所有级别为warn或更高的错误消息,也应该转到altout appender中,无论它们来自哪里。但我似乎无法让它起作用。
如有任何帮助,我们将不胜感激。谢谢
我喜欢将oracle数据库脚本设置为在出现任何数据库或操作系统问题时失败。 我一直在考虑迁移到SQLCL,但我用于检测和触发非数据库问题回滚的SQL*Plus方法在SQLCL中失败了,我想知道是否有人有其他解决方案(或好的解决方法)。 我一直在使用将任何SP-错误定向到SPERRORLOG,在那里我可以在提交之前检测到它们并决定回滚/分支/继续/警报等。 我抓取了最新的sqlcl(2016年6月s
安全性错误配置在安全性设置被定义,实现和维护为默认设置时出现。良好的安全性要求为应用程序,Web服务器,数据库服务器和平台定义和部署安全配置。使软件保持最新同样重要。 威胁代理 - 匿名外部攻击者以及拥有自己帐户的用户可能会试图破坏系统。 攻击者的方法 - 访问默认帐户,未使用的页面,未修补的漏洞,未受保护的文件和目录以获得未经授权的访问。 安全弱点 - 可以发生在任何级别 - 平台,Web服务器