我正在创建一个android应用程序。它编译良好,并且Eclipse不会发现任何错误。但是,当我运行它时,会在堆栈跟踪中得到它。

<disconnected>DalvikVM[localhost:8639]


这是我的代码:

package com.warhammerdicerrolleralpha;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class myMain extends Activity
{

    EditText enternumberofdice;

    TextView textGenerateNumber;

    int number1;

    int number2;

    ImageView i;

    private EditText text, text2, text3;

    private Button btutorial1;

    private int myFaceValue;

    int myNum;

    /**
     * Called when the activity is first created.
     *
     * @return
     */
    @Override

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        textGenerateNumber = (TextView) findViewById(R.id.text4);

        number1 = Integer.parseInt(text.getText().toString());

        number2 = Integer.parseInt(text2.getText().toString());

        ImageView i = new ImageView(this);

        i.setAdjustViewBounds(true);

    }

    public void go()
    {
        while (myNum > 0)
        {

            textGenerateNumber.setText(String.valueOf(enternumberofdice));

             --myNum;

            return;
        }
    }

    public int roll()
    {
        int val = (int) (6 * Math.random() + 1); // Range 1-6
        setValue(val);
        return val;
    }

    {
        try
        {
            myNum = Integer.parseInt(enternumberofdice.getText().toString());
        }
            catch (NumberFormatException nfe)
        {
            enternumberofdice.setText("Does not work");
        }
    }

    public int getValue()
    {
        return myFaceValue;
    }

    public void setValue(int myFaceValue)
    {
        this.myFaceValue = myFaceValue;

    }

    {
        switch (myFaceValue)
        {
        case 5:
            i.setImageResource(R.drawable.dicefive);
            break;
        case 1:
            i.setImageResource(R.drawable.diceone);
            break;
        case 3:
            i.setImageResource(R.drawable.dicethree);
            break;
        case 2:
            i.setImageResource(R.drawable.dicetwo);
            break;
        case 4:
            i.setImageResource(R.drawable.dicefour);
            break;
        case 6:
            i.setImageResource(R.drawable.dicesix);
            break;
        default:
            i.setImageResource(R.drawable.error);
            break;
        }

        text = (EditText) findViewById(R.id.editText1);

        text2 =(EditText) findViewById(R.id.editText2);

        text3 = (EditText) findViewById(R.id.editText3);

        btutorial1 = (Button) findViewById(R.id.button1);

        btutorial1.setOnClickListener((OnClickListener) this);

        Button buttonGenerate = (Button) findViewById(R.id.button1);

        enternumberofdice = (EditText) findViewById(R.id.enternumberofdice);

        Button buttonGenerate2 = (Button) findViewById(R.id.battlecalculate);

        buttonGenerate2.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                    setContentView(R.layout.main2);
            }

        });

        buttonGenerate.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                go();

                roll();
            }

        });
    }

    public void onClick(View view)
    {
        switch (view.getId())
        {
            case R.id.button1:

                if (number1 > number2)
                {
                    text3.setText("Three and above");
                    return;
                }

                else if (number1 < number2)
                {
                    text3.setText("Five and above");
                    return;
                }

                else if (number1 == number2)
                {
                    text3.setText("Four and above");
                    return;
                }

                else
                {
                    text3.setText("Not Working");
                    return;
                }

        }
    }
}


附言您如何将xml代码添加到帖子中。当我在自己的帖子中添加xml代码时,它不会出现在预览页面中。

这是我的堆栈跟踪。

DalvikVM [本地主机:8695]
    线程[ main](已暂停(RuntimeException异常))
        ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,Intent)行:2585
        ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord,Intent)行:2679
        ActivityThread.access $ 2300(ActivityThread,ActivityThread $ ActivityRecord,Intent)行:125
        ActivityThread $ H.handleMessage(Message)行:2033
        ActivityThread $ H(Handler).dispatchMessage(Message)行:99
        Looper.loop()行:123
        ActivityThread.main(String [])行:4627
        Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)行:不可用[本机方法]
        Method.invoke(Object,Object ...)第521行
        ZygoteInit $ MethodAndArgsCaller.run()行:868
        ZygoteInit.main(String [])行:626
        NativeStart.main(String [])行:不可用[本机方法]
    线程[活页夹线程#2](正在运行)
    线程[活页夹线程#1](正在运行)

最佳答案

您执行的类级变量初始化,例如textGenerateNumber,必须在setContentView方法中调用onCreate之后执行。

更新:重组代码,您应该具有以下内容。但是,由于尚未初始化number1number2变量,因此texttext2分配没有意义。

....

EditText enternumberofdice;
TextView textGenerateNumber;
private EditText text, text2, text3;
private Button btutorial1;
int number1;
int number2;
ImageView i;
private int myFaceValue;
int myNum;


@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    textGenerateNumber = (TextView) findViewById(R.id.text4);

    //BUG: will fail since text/text2 isn't initialized
    //number1 = Integer.parseInt(text.getText().toString());
    //number2 = Integer.parseInt(text2.getText().toString());

    i = new ImageView(this);
    i.setAdjustViewBounds(true);
}

07-25 22:33