Question

Actually i dont know where the problem is.I think that it must be in creating TableLayout. I dont know how to fix the error and make the app to work. This program shows the error "java.lang.ArithmeticException : divide by zero" error The program has EditText(edText) which asks for input from user. Its type is NUMBER.(here r is the value from edText) Below the EditText there is a Button(bt) which displays the edText value. Below the button (bt) there is another Button(bt1) which again displays the edText Value. This button must also displays r rows and 4 columns of EditText views i.e, user must enter r*4 input data in EditText. I cant clear the error and i dont know how to clear that error.

public class Ybus_Activity extends Activity {
    int i;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ybus);
        final LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        final LinearLayout main = (LinearLayout)findViewById(R.id.android_main_layout);
        TextView getData=new TextView(this);
        getData.setText("Enter the number of LineData : ");
        getData.setId(5);
        getData.setLayoutParams(params);
        main.addView(getData);
        final EditText edText = new EditText(this);
        edText.setId(3);
        edText.setLayoutParams(params);
        edText.setWidth(100);
        edText.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        edText.setInputType(InputType.TYPE_CLASS_NUMBER);
        edText.setKeyListener(DigitsKeyListener.getInstance());
        edText.setMaxLines(1);
        main.addView(edText );
        Button bt = new Button(this);
        bt.setText("Click to enter Linedata");
        bt.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        main.addView(bt);
        final TextView text = new TextView(this);
        bt.setOnClickListener(new View.OnClickListener() 
        { 
            public void onClick(View v) 
            {
                String ed=edText.getText().toString(); 

                try{
                    i =Integer.parseInt(ed);
                    //setting value here
                    text.setText(i+"");
                    //or you can do like this
                    //text.setText(String.valueOf(i));
                }catch(NumberFormatException ex){
                    text.setText("Value at TextView is not a valid integer");
                }
            }
        });
        main.addView(text);
        final TextView text2 = new TextView(this);
        Button two = new Button(this);
        two.setText("Second");
        main.addView(two);
        main.addView(text2);
        two.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v) {
                text2.setText(String.valueOf(i));
                main.addView(createTL(i,getBaseContext()));
                System.out.println(+i);
            }

        });
    }
    public static TableLayout createTL(int r, Context context)
    {
        int c=4;
        LayoutParams params = new 

                LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
        TableLayout tl = new TableLayout(context);
        tl.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT));
        tl.setStretchAllColumns(true);
        TableRow[] tr = new TableRow[r];
        EditText[][] et = new EditText[r][c];
        for(int i=0;i<r;i++)
        {
            System.out.println("line i called" + i);
            tr[i] = new TableRow(context);
            for(int j=0;j<4;j++)
            {
                et[i][j] = new EditText(context);
                et[i][j].setText("o.oo");
                et[i][j].setLayoutParams(params);
                et[i][j].setWidth(100);
                et[i][j].setImeOptions(EditorInfo.IME_ACTION_NEXT);
                et[i][j].setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
                et[i][j].setKeyListener(DigitsKeyListener.getInstance());
                et[i][j].setMaxLines(1);
                System.out.println("EditText is created" + i  + j);
                tr[i].addView(et[i][j]);
                System.out.println("Tr is created" + i);
            }
            tl.addView(tr[i]);
            System.out.println("TLL is created" + i);
        }
        return tl;
    }
}

My Logcat :

02-23 12:56:36.147: I/System.out(1742): line i called0
02-23 12:56:36.155: I/System.out(1742): EditText is created00
02-23 12:56:36.155: I/System.out(1742): Tr is created0
02-23 12:56:36.186: I/System.out(1742): EditText is created01
02-23 12:56:36.186: I/System.out(1742): Tr is created0
02-23 12:56:36.195: I/System.out(1742): EditText is created02
02-23 12:56:36.206: I/System.out(1742): Tr is created0
02-23 12:56:36.206: I/System.out(1742): EditText is created03
02-23 12:56:36.215: I/System.out(1742): Tr is created0
02-23 12:56:36.225: I/System.out(1742): TLL is created0
02-23 12:56:36.225: I/System.out(1742): line i called1
02-23 12:56:36.235: I/System.out(1742): EditText is created10
02-23 12:56:36.235: I/System.out(1742): Tr is created1
02-23 12:56:36.245: I/System.out(1742): EditText is created11
02-23 12:56:36.245: I/System.out(1742): Tr is created1
02-23 12:56:36.265: I/System.out(1742): EditText is created12
02-23 12:56:36.265: I/System.out(1742): Tr is created1
02-23 12:56:36.275: I/System.out(1742): EditText is created13
02-23 12:56:36.275: I/System.out(1742): Tr is created1
02-23 12:56:36.275: I/System.out(1742): TLL is created1
02-23 12:56:36.285: I/System.out(1742): 2
02-23 12:56:36.285: D/AndroidRuntime(1742): Shutting down VM
02-23 12:56:36.285: W/dalvikvm(1742): threadid=1: thread exiting with uncaught exception (group=0xb2f97288)
02-23 12:56:36.305: E/AndroidRuntime(1742): FATAL EXCEPTION: main
02-23 12:56:36.305: E/AndroidRuntime(1742): java.lang.ArithmeticException: divide by zero
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.TableLayout.mutateColumnsWidth(TableLayout.java:583)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.TableLayout.shrinkAndStretchColumns(TableLayout.java:572)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.TableLayout.measureVertical(TableLayout.java:470)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.TableLayout.onMeasure(TableLayout.java:435)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.View.measure(View.java:15172)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.View.measure(View.java:15172)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.View.measure(View.java:15172)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.View.measure(View.java:15172)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.View.measure(View.java:15172)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.Choreographer.doFrame(Choreographer.java:525)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.os.Handler.handleCallback(Handler.java:615)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.os.Looper.loop(Looper.java:137)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at java.lang.reflect.Method.invokeNative(Native Method)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at java.lang.reflect.Method.invoke(Method.java:511)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-23 12:56:36.305: E/AndroidRuntime(1742):     at dalvik.system.NativeStart.main(Native Method)
02-23 12:56:36.425: D/dalvikvm(1742): GC_CONCURRENT freed 162K, 3% free 11001K/11271K, paused 24ms+27ms, total 107ms
Was it helpful?

Solution

This line of code is causing the error. This is what I understood after referring to this link

int c=4;
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); //this is causing the error
tl.setStretchAllColumns(true);

You need to change it to

TableRow.LayoutParams params = new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);

OTHER TIPS

It has to do something related to setStretchAllColumns and width settings due to which there is some internal android calculation which leads to the exception. Just checkout the grepcode with the method that throws the exception and you will get a better idea.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top