EditText.getText()的toString()崩溃 [英] EditText.getText().toString() crashes

查看:169
本文介绍了EditText.getText()的toString()崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Andr​​oid应用程序,我在其中用户将信息分为3 editTexts 3对话框和它的数据的一个显示器到另一个类/页后,随机挑选,选择哪些数据。

In my android application , I have 3 dialogue boxes in which the user puts info into 3 editTexts and it will display the one of the data onto another class/page after it randomly picks which data to choose.

这是我的mainClass

This is my mainClass

public class MainActivity extends Activity {
   //Variables are displayed in this area 
    String choices[] = new String[3];
    //EditText editText;
    //EditText editText2;
    //EditText editText3;
    Button mainButton ; 

    Random rand = new Random(); 
    int finalChoice; 
    String displayChoice = ""; 
    EditText editText ; 
    EditText editText2; 
    EditText editText3;
    EditText editText4; 
    String test;
    int count = 3; 


//--------------------------- --------------------------------------------------------


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //Makes Button

        setContentView(R.layout.activity_main);
        declareTextBox(); 
        setButton(); 
        String choice1 = editText.getText().toString();
        String choice2 = editText2.getText().toString(); 
        String choice3 = editText3.getText().toString();

        choices[0] = choice1; //pass from click button to method.
        choices[1] = choice2;
        choices[2] = choice3;  

        finalChoice =rand.nextInt(2);


    }
     public void setButton()
     {
         final Button mainbutton = (Button) findViewById(R.id.mainButton);

         mainbutton.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {

             test =  ((EditText) findViewById(R.id.editText4)).getText().toString(); 

        // count++; 
         //retChoice(); 
            // loadScreen(); 
         Intent i  = new Intent(MainActivity.this, resultScreen.class);
         i.putExtra("display" , displayChoice);

         Intent intent = new Intent(MainActivity.this,loadingScreen.class);

            //start the second Activity
         MainActivity.this.startActivity(intent);


          }
      }); 

     }
    public void declareTextBox()
    {
        editText = (EditText) findViewById(R.id.editText1);
        editText2 =  (EditText) findViewById(R.id.editText2); 
        editText3 = (EditText) findViewById(R.id.editText3); 

    }
    public void getString(String finalChoice)
    {
        finalChoice = displayChoice; 
    }


    public String retChoice()
    {


        displayChoice = choices[finalChoice];

        return displayChoice; 
    }
    public void clearText()
    {
         editText.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                 editText.setText(" "); 
                }
            }); 

         editText2.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    editText2.setText(" "); 
                }
            }); 

         editText3.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    editText3.setText(" "); 
                }
            }); 

    }
    public void getText2()
    {

    }
    public void getText()
    {



    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

这是我的Display类:

This is my Display class :

public class resultScreen extends Activity {
    MainActivity ma = new MainActivity(); 
    //Method supposedly retrieves the string data from MainActivity Class but somehow displayed null instead. 
    //Find a way to keep the string variable when transfering from one class to another class. 
      String finalResult = ma.retChoice(); 
      public void onCreate(Bundle resultScreen){
      super.onCreate(resultScreen);
      setContentView(R.layout.resultscreen);
      //ma.displayChoice.toString(); 

      String str = finalResult;

      TextView text = (TextView) findViewById(R.id.textView1);
      text.setText(str);

      final Button backbutton = (Button) findViewById(R.id.backButton);
      backbutton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) 

      {

      Intent intent = new Intent(resultScreen.this,MainActivity.class);
      resultScreen.this.startActivity(intent);     


      }
        });



        }

}

这是在单击主按钮之后我的加载屏幕类

And this is my loading screen class right after the main button is clicked

public class loadingScreen extends Activity{

protected void onCreate(Bundle loadingScreen) {
    // TODO Auto-generated method stub

    super.onCreate(loadingScreen);
    setContentView(R.layout.loadingscreen);


    //If sound clip 20 sec long we don't want to carryit outside next class


    // A timer thread looking for "run" method
    Thread timer = new Thread()
    {
        public void run() {
            try {

                //this is how many mil sec
                sleep(8000);


            } catch (InterruptedException e) {
                e.printStackTrace();

            } finally {
                Intent intent = new Intent(loadingScreen.this, resultScreen.class);
                loadingScreen.this.startActivity(intent);
                loadingScreen.this.finish();

             }

        }
    };
    timer.start();
}

}

我的应用程序崩溃几秒到当程序试图以显示对resultScreen数据载入画面。

My app crashes a few seconds into the loading screen when the program attempts to display the data on the resultScreen.

下面是我的logcat

Here's my logCat

    05-17 22:32:54.446: D/AndroidRuntime(1181): Shutting down VM
05-17 22:32:54.446: W/dalvikvm(1181): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
05-17 22:32:54.636: E/AndroidRuntime(1181): FATAL EXCEPTION: main
05-17 22:32:54.636: E/AndroidRuntime(1181): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.choiceprototest/com.example.choiceprototest.resultScreen}: java.lang.NullPointerException
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.os.Looper.loop(Looper.java:137)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.app.ActivityThread.main(ActivityThread.java:5039)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at java.lang.reflect.Method.invokeNative(Native Method)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at java.lang.reflect.Method.invoke(Method.java:511)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at dalvik.system.NativeStart.main(Native Method)
05-17 22:32:54.636: E/AndroidRuntime(1181): Caused by: java.lang.NullPointerException
05-17 22:32:54.636: E/AndroidRuntime(1181):     at com.example.choiceprototest.MainActivity.retChoice(MainActivity.java:101)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at com.example.choiceprototest.resultScreen.<init>(resultScreen.java:18)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at java.lang.Class.newInstanceImpl(Native Method)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at java.lang.Class.newInstance(Class.java:1319)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
05-17 22:32:54.636: E/AndroidRuntime(1181):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
05-17 22:32:54.636: E/AndroidRuntime(1181):     ... 11 more
05-17 22:33:03.385: I/Process(1181): Sending signal. PID: 1181 SIG: 9
05-17 22:33:05.435: E/Trace(1204): error opening trace file: No such file or directory (2)

谢谢你们。

Thanks guys.

推荐答案

我相信我看到的问题。您试图访问阵列,但它是一个实例变量,而不是静态的,所以它是当您退出活动。你可以把它们放在一个静态类,并访问他们的方式或通过传递字符串变量的意图,根据你需要什么。

I believe I see the problem. You are trying to access your Array but it is an instance variable instead of static so it is being killed off when you exit your Activity. You can either put them in a static class and access them that way or pass a String variable through your Intent, depending on what you need.

如果你有字符串你需要的时候你离开的值 MainActivity 那么我很可能只是把它传递通过意图。如果该值取决于东西在你的其他的活动之一那么我会考虑把它放在一个单独的类,但它并不像这正是你所需要的。

If you have the value of the String you need when you leave MainActivity then I would probably just pass it through your Intent. If the value depended on something in one of your other Activities then I would consider putting it in a separate class but it doesn't look like that's what you need here

修改

您已经在这里做的,

Intent i  = new Intent(MainActivity.this, resultScreen.class);
     i.putExtra("display" , displayChoice);

     Intent intent = new Intent(MainActivity.this,loadingScreen.class);

但是,你是不是开始了活动,将获得字符串

i.putExtra("display" , displayChoice);

这行会通过一个字符串键displpay displayChoice的和值,虽然我觉得值是一个空字符串在这一点上,但你不启动活动。我失去了你的流量是如何想工作,但基本上你会做这样的事

that line would pass a String with key "displpay" and value of displayChoice, although I think that value is an empty String at that point, but you don't start that Activity. I'm lost on how your flow is suppose to work but basically you would do something like this

String displayChoice = "testValue";   // some arbitrary value--whatever you need to send
Intent i  = new Intent(MainActivity.this, resultScreen.class);  // create the Intent
i.putExtra("display" , displayChoice);  // add the extra
startActivity(i);  //start the Activity

再进去 resultScreen 的值的onCreate()

Intent recIntent = getIntent();  // get the Intent that started this Activity
String value = recIntent.getStringExtra("display");   // get the value using the key
// value now equals "testValue"

这篇关于EditText.getText()的toString()崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆