gpt4 book ai didi

java - 是否可以使用 Web 服务器 api 中的 MpAndroid 显示图表?

转载 作者:行者123 更新时间:2023-12-02 09:12:16 26 4
gpt4 key购买 nike

我是 Android 开发新手,我有一个不同货币项目的列表,我应该打开一个新屏幕,其中包含单击项目的图表。

当用户单击列表项时,应打开一个新屏幕,其中显示所选货币过去 7 天基于美元的汇率图表。我应该在过去 7 天内每次更新货币数据时都请求。

获取给定时期内美元和加元之间的货币历史记录的示例请求:

https://api.exchangeratesapi.io/history?start_at=2019-11-27&end_at=2019-12-03&base=USD&symbols=CAD

这是我的代码:

MainActivity

 public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

progressBar = findViewById(R.id.progress_bar);
new GetServerData(this).execute();

}

private static class GetServerData extends AsyncTask<Integer, Void, List<CurrencyRate>> {
private static final int TIMEOUT = 30000;
private static final String BASE_URL = "https://api.exchangeratesapi.io/latest?base=USD";
private WeakReference<MainActivity> activityReference;

GetServerData(MainActivity context) {
activityReference = new WeakReference<>(context);
}

@Override
protected void onPreExecute() {
super.onPreExecute();
MainActivity activity = activityReference.get();
if (activity == null || activity.isFinishing()) {
return;
}
activity.progressBar.setVisibility(View.VISIBLE);
}

@Override
protected List<CurrencyRate> doInBackground(Integer... integers) {
List<CurrencyRate> currencyList = new ArrayList<>();
OkHttpClient client = new OkHttpClient().newBuilder()
.readTimeout(TIMEOUT, TimeUnit.SECONDS)
.connectTimeout(TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(TIMEOUT, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
Request request = new Request.Builder()
.url(BASE_URL)
.build();
try {
Response response = client.newCall(request).execute();
Log.d("Response", response.toString());
long tx = response.sentRequestAtMillis();
long rx = response.receivedResponseAtMillis();
System.out.println("response time : " + (rx - tx) + " ms");
JSONObject object = new JSONObject(Objects.requireNonNull(response.body()).string());
JSONObject rates = object.getJSONObject("rates");
Iterator<String> iterator = rates.keys();
while (iterator.hasNext()) {
String key = iterator.next();
String value = rates.getString(key);
CurrencyRate data = new CurrencyRate(key, value);
currencyList.add(data);
}
} catch (IOException | JSONException e) {
e.printStackTrace();
Log.d("MainActivity", e.toString());
}
return currencyList;
}

@Override
protected void onPostExecute(final List<CurrencyRate> result) {
final MainActivity activity = activityReference.get();
if (activity == null || activity.isFinishing()) {
return;
}
ListView listView = activity.findViewById(R.id.list_view);
CurrencyAdapter adapter = new CurrencyAdapter(activity, result);
listView.setAdapter(adapter);
listView.smoothScrollToPosition(0);
adapter.notifyDataSetChanged();
activity.progressBar.setVisibility(View.GONE);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(activity.getApplicationContext(), result.get(i).getName()+" Clicked", Toast.LENGTH_SHORT).show();
/*Which code should be here to open a new screen with exchange chart for last 7 days of clicked item??*/
}
});
}
}

}

CurrencyRate class

public class CurrencyRate {
private String name;
private String value;

public CurrencyRate(String name, String value) {
super();
this.name = name;
this.value = value;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

}

My emulator screen

enter image description here

因此,当您看到这些项目时,我想显示点击项目的图表(给定期间 7 天内美元和点击项目之间的货币图表)

最佳答案

I think that i should format the value by using XAxis like that xAxis.setValueFormatter(here i should use a class);

详细说明我对您的其他问题的回答并且不了解 MPAndoirdChart,从文档中我看来您需要创建自己的 ValueFormatter 子类并覆盖 getFormattedValue(float) 返回类似 LocalDate.ofEpochDay(Math.round(value)).toString() 的内容。您可能想使用 DateTimeFormatter 而不是 toString

这是一个快速尝试,未经测试:

public class DateValueFormatter extends ValueFormatter {

@Override
String getFormattedValue(float value) {
int epochDay = Math.round(value);
LocalDate date = LocalDate.ofEpochDay(epochDay);
return date.toString();
}

}

我的谦虚和初步建议是实例化此类的对象并将其传递给 xAxis.setValueFormatter()

链接

关于java - 是否可以使用 Web 服务器 api 中的 MpAndroid 显示图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59306683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com