我有以下问题。我有两个#aktie-skat-logo {
margin-top: 15px;
display: block;
}
应用程序,其中包含fragment
的静态arraylist
。
错误的发生可以这样描述:
fragments
添加到entries
( FragmentA )arraylist
( 片段B )arraylist
添加到entrie
- >发生错误,应用程序崩溃片段的代码是:
片段A
arraylist
片段B
button.setOnClickListener(new View.OnClickListener() {
public void onClick (View view) {
if (editText3.getText().toString().matches("")) {
Toast.makeText(getActivity(), "You did not enter a Valid Item ID", Toast.LENGTH_LONG).show();
return;
}
else if (editText2.getText().toString().matches("")) {
Toast.makeText(getActivity(), "You did not enter a Valid Quantitiy", Toast.LENGTH_LONG).show();
return;
}
else {
String nomen = (editText3.getText().toString());
float number = Float.parseFloat(editText2.getText().toString());
entries.add(new PieEntry(number, nomen));
editText3.setText("");
editText2.setText("");
editText3.requestFocus();
}
}
});
错误即时消息:
java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1
如果一些经验丰富的专家可以帮助我,我将非常感激。 感谢。
更新:包含错误堆栈
button2.setOnClickListener(new View.OnClickListener() {
public void onClick (View view) {
getResources().getColor(R.color.violp);
getResources().getColor(R.color.bluep);
getResources().getColor(R.color.redp);
getResources().getColor(R.color.greenp);
getResources().getColor(R.color.yellowp);
getResources().getColor(R.color.orangep);
getResources().getColor(R.color.lightbluep);
getResources().getColor(R.color.purplep);
getResources().getColor(R.color.darkredp);
PieDataSet set = new PieDataSet(entries, "");
set.setColors(new int[]{R.color.bluep, R.color.greenp, R.color.violp, R.color.redp, R.color.yellowp, R.color.orangep, R.color.lightbluep, R.color.purplep, R.color.darkredp}, getActivity());
PieData datax = new PieData(set);
piechart.setData(datax);
Toast.makeText(getActivity(), (R.string.loading),
Toast.LENGTH_SHORT).show();
piechart.setNoDataText(String.valueOf(R.string.nodata));
piechart.notifyDataSetChanged();
piechart.animateX(2000, Easing.EasingOption.EaseInExpo);
piechart.animateY(2000, Easing.EasingOption.EaseInExpo);
}
});
答案 0 :(得分:1)
MPAndroidChart无法保护您免受separating model and view layers的影响以及管理片段和活动lifecycles的问题。请注意,片段之间的“通信”(例如一个片段操纵另一个片段的数据)是not recommended by Google:
两个片段永远不应该直接沟通
尽管Entry
可能看起来像模型层的成员,但它实际上被设计为与PieChart
紧密耦合,ArrayIndexOutOfBoundsException
是视图层的一部分。它肯定不比它与之关联的View更长,如果你想避免诸如List<Entry>
之类的错误,那么支持List生命周期应该与它所在的Fragment的生命周期一致。用过的。这并不意味着一旦PieChart
成为List<Entry>
的一部分,就永远无法从ViewPager
添加/删除 - MPAndroidChart将允许您在上述约束内执行此操作。
为了解决上述错误,我建议采用与共享静态对象不同的方法,这在Android中几乎不是一个好主意。相反,您可以共享一个单独的模型层,其中包含您将用于构造ViewPager
的数据。当片段A更新模型时,您可以使用事件从片段B内的数据触发重建图表。
您在评论中说明您使用的是fragmentTransaction.show()
。 .hide()
使用onHiddenChanged
和ViewPager
,通常会将碎片保持在恢复状态。也许最简单的解决方案是覆盖onActivityCreated(View v)
,因为当@Override
onActivityCreated(View v) {
//get updated model from Activity
//rebuild chart from updated model
}
@Override
onHiddenChanged(boolean hidden) {
if (hidden == false) {
//get updated model from Activity
//rebuild chart from updated model
}
}
切换到新页面时总是会调用它。我认为(不是100%肯定)你还需要在StoredProcedureQuery query = getCurrentSession().createStoredProcedureQuery("updateinselgibilitycount")
.registerStoredProcedureParameter("ppatientinsid", Long.class, ParameterMode.IN)
.registerStoredProcedureParameter("pencounterID", Long.class, ParameterMode.IN)
.setParameter("ppatientinsid", ppatientinsid).setParameter("pencounterID", encounterID);
query.execute();
打电话。
所以,你会有这样的事情:
10:04:42.167 [http-nio-8080-exec-3] WARN o.h.p.internal.ProcedureCallImpl - HHH000456: Named parameters are used for a callable statement, but database metadata indicates named parameters are not supported.
Hibernate:
{call updateinselgibilitycount(?,?)}
10:04:42.329 [http-nio-8080-exec-3] ERROR c.p.w.utilities.ExceptionHandler - User ID : 1
Error : org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:413)
at org.springframework.orm.hibernate5.HibernateExceptionTranslator.translateExceptionIfPossible(HibernateExceptionTranslator.java:54)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)