Сбой при вызове функции из второго файла Java - PullRequest
0 голосов
/ 18 февраля 2012

Я относительно новичок в игре для Android, и у меня возникает проблема с зависанием моего приложения при вызове функции из второго класса Java.

это мой основной файл JAVA:

    package mashuda.tools.calculator;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class CalculatorActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        Drawinterface layout = new Drawinterface();


        setContentView(layout.drawit());


    }

}

и он вызывает этот код:

 package mashuda.tools.calculator;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class Drawinterface extends Activity { 
    /** Called when the activity is first created. 
     * @return */


        TableLayout drawit(){

            TableLayout maintable = new TableLayout(this);

            maintable.setStretchAllColumns(true);
            maintable.setShrinkAllColumns(true);

            TableRow banner = new TableRow(this);
            banner.setGravity(Gravity.CENTER_HORIZONTAL);

            TableRow rowOutput = new TableRow(this);
            TableRow rowSeven = new TableRow(this);
            TableRow rowFour = new TableRow(this);
            TableRow rowOne = new TableRow(this);
            TableRow rowZero = new TableRow(this);


            //answer box
            TextView answer = new TextView(this);
            answer.setText("ANSWER");

            answer.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);

            answer.setBackgroundColor(-1);

            answer.setGravity(Gravity.RIGHT);
            answer.setTypeface(Typeface.SERIF);

            TableRow.LayoutParams params = new TableRow.LayoutParams();
            params.span = 5;

            //loads answer bar
            rowOutput.addView(answer, params);
            //first column
            //creates 7 key
            Button sevenkey = new Button(this);
            sevenkey.setText("7");
            sevenkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 8 key
            Button eightkey = new Button(this);
            eightkey.setText("8");
            eightkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 9 key
            Button ninekey = new Button(this);
            ninekey.setText("9");
            ninekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates division key
            Button dividekey = new Button(this);
            dividekey.setText("/");
            dividekey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads top row
            rowSeven.addView(sevenkey);
            rowSeven.addView(eightkey);
            rowSeven.addView(ninekey);
            rowSeven.addView(dividekey);

            //creates 4 key
            Button fourkey = new Button(this);
            fourkey.setText("4");
            fourkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 5 key
            Button fivekey = new Button(this);
            fivekey.setText("5");
            fivekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 6 key
            Button sixkey = new Button(this);
            sixkey.setText("6");
            sixkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates multiplication key
            Button multiplykey = new Button(this);
            multiplykey.setText("X");
            multiplykey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads keys into second row
            rowFour.addView(fourkey);
            rowFour.addView(fivekey);
            rowFour.addView(sixkey);
            rowFour.addView(multiplykey);


            //creates 1 key
            Button onekey = new Button(this);
            onekey.setText("1");
            onekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 2 key
            Button twokey = new Button(this);
            twokey.setText("2");
            twokey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 3 key
            Button threekey = new Button(this);
            threekey.setText("3");
            threekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates add key
            Button addkey = new Button(this);
            addkey.setText("+");
            addkey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads keys into third row
            rowOne.addView(onekey);
            rowOne.addView(twokey);
            rowOne.addView(threekey);
            rowOne.addView(addkey);

            //creates 0 key
            Button zerokey = new Button(this);
            zerokey.setText("0");
            zerokey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates . key
            Button decimalkey = new Button(this);
            decimalkey.setText(".");
            decimalkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates - key
            Button negativekey = new Button(this);
            negativekey.setText("+/-");
            negativekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates equals key
            Button equalskey = new Button(this);
            equalskey.setText("=");
            equalskey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads keys into fourth row
            rowZero.addView(zerokey);
            rowZero.addView(decimalkey);
            rowZero.addView(negativekey);
            rowZero.addView(equalskey);

            // loads rows into table
            maintable.addView(rowOutput); 
            maintable.addView(rowSeven); 
            maintable.addView(rowFour);
            maintable.addView(rowOne);
            maintable.addView(rowZero); 

            //sets view as maintable
            return (maintable);

}
}

Я добавил второй файл в манифест Android. и мой компилятор (eclipse) не обнаруживает никаких ошибок. Любая помощь будет принята с благодарностью

Ответы [ 3 ]

1 голос
/ 18 февраля 2012

Вместо создания вашего TableLayout программно используйте файл ресурсов xml.

Вот учебник по этому вопросу: http://huuah.com/using-tablelayout-on-android/

0 голосов
/ 18 февраля 2012

Прежде всего не нужно расширять Activity для Drawinterface.Пока вы создаете любой вид, используя код Java.Вам необходимо расширить класс View или любой его дочерний класс.Здесь вы можете расширить TableLayout.

Или самое простое - создать макет в XML.Код Java создает ненужную сложность при разработке и даже в понимании (как он уже создан в приведенном выше коде).

0 голосов
/ 18 февраля 2012

Я скопировал ваш код, вот ошибка, которую я получил, ответа пока нет, но это может помочь другим

02-17 20:00:27.020: DEBUG/dalvikvm(1176): GC freed 30619 objects / 777176 bytes in 06ms
02-17 20:32:10.830: ERROR/AndroidRuntime(1222): Caused by: java.lang.NullPointerException
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.view.View.<init>(View.java:1777)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.view.ViewGroup.<init>(ViewGroup.java:279)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.widget.LinearLayout.<init>(LinearLayout.java:88)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.widget.TableLayout.<init>(TableLayout.java:90)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at com.android.demo.notepad1.Drawinterface.drawit(Drawinterface.java:20)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at com.android.demo.notepad1.CalculatorActivity.onCreate(CalculatorActivity.java:25)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
...