Android : index out of bound exception in arrayadapter

on Wednesday, September 3, 2014


I am making dynamic forms sith dynamic layouts. For some data i am getting indexout of bound exception. I am very confused with lagcat as it is not showing line number on which exception has occured.


My logcat is as follows:



09-03 12:51:41.451: E/AndroidRuntime(2624): FATAL EXCEPTION: main 09-03 12:51:41.451: E/AndroidRuntime(2624): java.lang.IndexOutOfBoundsException: Invalid index 11, size is 4 09-03 12:51:41.451: E/AndroidRuntime(2624): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 09-03 12:51:41.451: E/AndroidRuntime(2624): at java.util.Arrays$ArrayList.get(Arrays.java:66) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:390) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.Spinner.makeAndAddView(Spinner.java:534) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.Spinner.layout(Spinner.java:485) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.Spinner.onLayout(Spinner.java:449) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.View.layout(View.java:13846) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewGroup.layout(ViewGroup.java:4464) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.TableLayout.onLayout(TableLayout.java:444) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.View.layout(View.java:13846) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewGroup.layout(ViewGroup.java:4464) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.TableLayout.onLayout(TableLayout.java:444) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.View.layout(View.java:13846) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewGroup.layout(ViewGroup.java:4464) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.ScrollView.onLayout(ScrollView.java:1438) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.View.layout(View.java:13846) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewGroup.layout(ViewGroup.java:4464) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.View.layout(View.java:13846) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewGroup.layout(ViewGroup.java:4464) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.LinearLayout.onLayout(LinearLayout.java:1420) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.View.layout(View.java:13846) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewGroup.layout(ViewGroup.java:4464) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.View.layout(View.java:13846) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewGroup.layout(ViewGroup.java:4464) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2147) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1905) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1125) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4607) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:747) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.Choreographer.doCallbacks(Choreographer.java:567) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.Choreographer.doFrame(Choreographer.java:536) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:733) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.os.Handler.handleCallback(Handler.java:615) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.os.Handler.dispatchMessage(Handler.java:92) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.os.Looper.loop(Looper.java:153) 09-03 12:51:41.451: E/AndroidRuntime(2624): at android.app.ActivityThread.main(ActivityThread.java:5086) 09-03 12:51:41.451: E/AndroidRuntime(2624): at java.lang.reflect.Method.invokeNative(Native Method) 09-03 12:51:41.451: E/AndroidRuntime(2624): at java.lang.reflect.Method.invoke(Method.java:511) 09-03 12:51:41.451: E/AndroidRuntime(2624): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 09-03 12:51:41.451: E/AndroidRuntime(2624): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 09-03 12:51:41.451: E/AndroidRuntime(2624): at dalvik.system.NativeStart.main(Native Method)



My code for creating dynamic form is as follows:



ScrollView sv = new ScrollView(this);

final TableLayout ll = new TableLayout(this);
ll.setPadding(20, 20, 20, 20);
sv.setBackgroundColor(Color.parseColor(this.getString(R.color.daidalos_gray)));
SQLiteDatabase conn = openOrCreateDatabase("androidMaper", MODE_PRIVATE, null);

m_newform = new guiform();
m_db = new DatabaseHelper(this);
m_formId = m_db.getFormId(m_formName.toString());

Log.e("FormId: ", m_formId + "");

Cursor cr = conn.rawQuery("SELECT labelName,type,'y',pickOneOptions,serverID FROM entities where formID=" + m_formId, null);

while (cr.moveToNext()) {
XmlGuiFormField newfield = new XmlGuiFormField();
newfield.setLabel(cr.getString(0));
newfield.setName(cr.getString(1));
newfield.setId(cr.getInt(4));
Log.e("Label: ", cr.getString(0) + "");
Log.e("Name: ", cr.getString(1) + "");
Log.e("Id: ", cr.getInt(4) + "");

if (cr.getString(2).equals("y"))
newfield.setRequired(true);
else
newfield.setRequired(true);
newfield.setOptions(cr.getString(3));
if (cr.getString(1).equals("1")) {
String option = null;
if (m_db.getValueForFormEntity(cr.getInt(4), m_itemId) != null) {
option = (m_db.getValueForFormEntity(cr.getInt(4), m_itemId));
m_formPreSubmitted = true;
}
XmlGuiEditBox field = new XmlGuiEditBox(this, newfield.getLabel(), option);
newfield.setObj(field);
}

else if (cr.getString(1).equals("2")) {
String option = null;
if (m_db.getValueForFormEntity(cr.getInt(4), m_itemId) != null) {
option = (m_db.getValueForFormEntity(cr.getInt(4), m_itemId));
m_formPreSubmitted = true; // IF ANY OF THE FIELD IS
// SUBMITTED THEN THIS MEANS
// FORM IS SUBMTTED
}
XmlGuiEditBox field = new XmlGuiEditBox(this, newfield.getLabel(), option);
field.makeNumeric();
newfield.setObj(field);
} else if (cr.getString(1).equals("4")) {
int option = 0;
if (m_db.getValueForFormEntity(cr.getInt(4), m_itemId) != null) {
option = Integer.parseInt(m_db.getValueForFormEntity(cr.getInt(4), m_itemId));
option--;
m_formPreSubmitted = true;
}
XmlGuiPickOne field = new XmlGuiPickOne(this, newfield.getLabel(), newfield.getOptions(), option);
newfield.setObj(field);
}

else if (cr.getString(1).equals("3")) {
int option = 0;
if (m_db.getValueForFormEntity(cr.getInt(4), m_itemId) != null) {
option = Integer.parseInt(m_db.getValueForFormEntity(cr.getInt(4), m_itemId));
m_formPreSubmitted = true;
}
XmlGuiCheckbox field = new XmlGuiCheckbox(this, newfield.getLabel(), option);
newfield.setObj(field);
} else if (cr.getString(1).equals("6")) {
String option = null;
if (m_db.getValueForFormEntity(cr.getInt(4), m_itemId) != null) {
option = (m_db.getValueForFormEntity(cr.getInt(4), m_itemId));
m_formPreSubmitted = true;
}
XmlDatetimePicker field = new XmlDatetimePicker(this, newfield.getLabel(), option);
newfield.setObj(field);
}

if (newfield.getObj() != null)
m_newform.m_fields.add(newfield);

}
conn.close();
cr.close();
// set the header


Log.e("Making", "Dialog");

TextView header = new TextView(this);
header.setText(m_formName);
header.setTextSize(18);

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f);
Log.e("After: ", "Layout");
header.setLayoutParams(param);
header.setTextColor(Color.parseColor("#AF951E"));
header.setPadding(10, 10, 10, 10);

LinearLayout formAndClose = new LinearLayout(this);
formAndClose.setOrientation(LinearLayout.HORIZONTAL);
formAndClose.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT));

Button closeForm = new Button(this);

closeForm.setBackground(this.getResources().getDrawable(R.drawable.icon_close));
closeForm.setLayoutParams(new LayoutParams(40, 40));
closeForm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
formAndClose.addView(header);
formAndClose.addView(closeForm);

ll.addView(formAndClose);

Log.e("Field Size", m_newform.m_fields.size()+"");
for (int i = 0; i < m_newform.m_fields.size(); i++) {
ll.addView((View) m_newform.m_fields.elementAt(i).getObj());
}
Button btn = new Button(this);
btn.setCompoundDrawablesWithIntrinsicBounds(R.drawable.finaldone, 0, 0, 0);
btn.setPadding(15, 0, 0, 0);
btn.setText("Save Form");
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
/* if (formCheck()) */
{
// insert values into database here..
try {
for (int i = 0; i < m_newform.m_fields.size(); i++) {
String value = m_newform.m_fields.elementAt(i).getvalue();

if (m_newform.m_fields.elementAt(i).getName().equals("4")) {

int valIncremented = Integer.parseInt(value);
valIncremented++;

value = valIncremented + "";
}

if (m_formPreSubmitted) {
m_db.updateMetaData(Integer.parseInt(m_itemId), m_newform.m_fields.elementAt(i).getId(), value);
} else {
m_db.addNewMetaData(m_itemId, m_newform.m_fields.elementAt(i).getId(), value);
}
}
Toast.makeText(DynamicForm.this, "Meta Data Added Successfully", Toast.LENGTH_SHORT).show();
} catch (SQLException e) {
Toast.makeText(DynamicForm.this, "Error While Inserting Form", Toast.LENGTH_SHORT).show();
e.printStackTrace();
} finally {
}
}
/*
* else { Toast.makeText(DynamicForm.this,
* "Fill the form First", Toast.LENGTH_SHORT).show(); }
*/
finish();
}
});
// btn.setPadding(0, 15, 0, 15);
btn.setBackgroundColor(Color.parseColor("#AF951E"));
btn.setHeight(128);
btn.setWidth(256);

ll.addView(btn);
ll.setOrientation(android.widget.LinearLayout.VERTICAL);
sv.addView(ll);
// sv.setBackgroundColor(Color.parseColor("#ff9900"));
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(sv);
setTitle("Data Entry Form");


I am completely dumb where i am getting this index out of bound exception


0 comments:

Post a Comment