0

好的,所以我搜索了大量关于同一件事的其他问题,但不知何故,这些解决方案都没有解决我的问题。所以这是我的问题,我的 Android 应用程序在必须将文本从 EditText 获取到 String 时立即崩溃。我在这里有我的“主要”活动:

package ign.test.fre;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView; 

public class testfre extends Activity {
    public static String cv = "";
    public static String cm = "";
    public static String cz = "";
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 

        //OTHER DEFINITIONS

    EditText ev = (EditText) findViewById(R.id.v);
    final Spinner em =(Spinner) findViewById(R.id.m);
    final Spinner ez = (Spinner) findViewById(R.id.z);
    final Button ee = (Button) findViewById(R.id.GO);

         //LOTS OF SPINNER STUFF

    ee.setOnClickListener(new AdapterView.OnClickListener() {
        public void onClick(View arg0) {
            if(initialsetup == false){
                enter = true;
                run();
            }
        }
    });
    ev.setOnKeyListener(new AdapterView.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            int key = event.getKeyCode();
            if(key == KeyEvent.KEYCODE_ENTER){
                enter = true;
            }
            return false;
        }
    });     
    initialsetup = false;
}
public void run(){
        if(enter == true){
        Calc.Test0();                               
        Calc.Test1_se();                            
        Calc.Test2_etre();                                  
        Calc.Test3_irr();                               
            if(Test3_irr == false){

        //MORE CODE

        textview6.setText("" + ausgabezeile[5]);      
        }   
    }
}

我的 Calc-Class 看起来像这样:package ign.test.fre;

public class Calc {

   public static void Test0(){
      testfre.cv = testfre.ev.getText().toString();
      testfre.cm = Data.m()[testfre.em.getSelectedItemPosition()];
      testfre.cz = Data.zeiten()[testfre.ez.getSelectedItemPosition()];
      testfre.cv = testfre.cv.toLowerCase();
      testfre.per1.setText(Data.personen()[0]);
      //...
   }
   public static void Test1_se(){
     //MORE CODE

并且在 Test0() 的前 3 行中存在问题。这些行中的哪一行是第一个或它们在代码中的哪个位置都无关紧要,它们始终是它们。即使将它们移动到 run() 或 onClick() 也没有改变任何东西。

我的 xml 布局如下所示:

<android:weightSum="1">
<EditText android:text="Enter Text" android:id="@+id/v" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true"></EditText>

<Spinner android:layout_width="100dp" android:id="@+id/m" android:layout_height="wrap_content" android:layout_below="@+id/v" android:layout_alignParentLeft="true"></Spinner>
<Button android:id="@+id/GO" android:layout_width="70dp" android:layout_height="wrap_content" android:text="GO" android:layout_alignTop="@+id/z" android:layout_alignParentRight="true"></Button>
<Spinner android:layout_width="150dp" android:id="@+id/z" android:layout_height="wrap_content" android:layout_below="@+id/v" android:layout_toRightOf="@+id/m"></Spinner>

我的 Logcat 条目如下所示(ignian.lomoko.french 与 ign.test.fre 等相同):

10-25 11:58:41.028: ERROR/AndroidRuntime(316):     at android.app.ActivityThread.main(ActivityThread.java:3683)
10-25 11:58:41.028: ERROR/AndroidRuntime(316):     at java.lang.reflect.Method.invokeNative(Native Method)
10-25 11:58:41.028: ERROR/AndroidRuntime(316):     at java.lang.reflect.Method.invoke(Method.java:507)
10-25 11:58:41.028: ERROR/AndroidRuntime(316):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-25 11:58:41.028: ERROR/AndroidRuntime(316):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-25 11:58:41.028: ERROR/AndroidRuntime(316):     at dalvik.system.NativeStart.main(Native Method)
10-25 11:58:41.038: WARN/ActivityManager(61):      Force finishing activity ignian.lomoko.french/.lomokofrench
10-25 11:58:41.558: WARN/ActivityManager(61):      Activity pause timeout for HistoryRecord{405c6018 ignian.lomoko.french/.lomokofrench}
10-25 11:58:43.698: INFO/Process(316):             Sending signal. PID: 316 SIG: 9
10-25 11:58:43.708: INFO/ActivityManager(61):      Process ignian.lomoko.french (pid 316) has died.
10-25 11:58:43.708: INFO/WindowManager(61):        WIN DEATH: Window{40691bd8 ignian.lomoko.french/ignian.lomoko.french.lomokofrench paused=false}
10-25 11:58:43.809: WARN/InputManagerService(61):  Got RemoteException sending setActive(false) notification to pid 316 uid 10034
10-25 11:58:52.691: WARN/ActivityManager(61):      Activity destroy timeout for HistoryRecord{405c6018 ignian.lomoko.french/.lomokofrench}

感谢您预先提供的任何帮助,因为我在其他任何地方都找不到任何类型的解决方案。到目前为止,在其他人的帮助下,我理解的问题是我无法从“Calc”-Class 访问我的变量。我想我正在寻找的是一种公开 Spinners 和 EditText 的方法。

好吧,我遵循了 dten 的解决方案,现在它可以工作了!

4

2 回答 2

1

我在您的代码中看到的一个问题是您两次声明对象。

在您参加的活动中查看

public static EditText ev;
public static Spinner em;
public static Spinner ez;   

在 Activity 的 onCreate 中,你又在做同样的事情:

EditText ev = (EditText) findViewById(R.id.v);
final Spinner em =(Spinner) findViewById(R.id.m);
final Spinner ez = (Spinner) findViewById(R.id.z);

尝试在 testfre Activity 的 onCreate 中用下面的代码替换上面的代码:

ev = (EditText) findViewById(R.id.v);
em =(Spinner) findViewById(R.id.m);
ez = (Spinner) findViewById(R.id.z); 
于 2011-10-25T11:58:28.417 回答
0

这段代码有很多问题,很难知道从哪里开始

有静态变量,您可以在方法中创建重复变量,然后尝试在外部引用

您从您的 testfre 中引用一个静态(名称应该有一个大写字母),您并不意味着它是静态的,但您似乎已设置为静态,因为您的 Calc 方法是静态的

你在你的 calc 类中引用了 testfre 的东西,这些东西甚至不存在于 testfre 中

这是一个疯狂的混乱

为什么你设置一个 keylistener 而不是在 keydown 上使用

在静态类的活动中的 edittext 上设置文本?

请给变量正确的名称,而不仅仅是 1 个字母

Test3_irr 和 textview6 是什么?

... 更多内容

public class TestFre extends Activity {

    private EditText ev;
    private Spinner em;
    private Spinner ez;

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

        ev = (EditText) findViewById(R.id.v);
        em = (Spinner) findViewById(R.id.m);
        ez = (Spinner) findViewById(R.id.z);
    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.GO:
            runCalculateAndSetText();
        }
    }

    private void runCalculateAndSetText() {

        String word = ev.getText().toString();
        int spinner1pos = em.getSelectedItemPosition();
        int spinner2pos = ez.getSelectedItemPosition();

        if ("".equals(word))
            return;
        if (spinner1pos < 0)
            return;
        if (spinner2pos < 0)
            return;

        // run evaluation for Je and populate textview
        String result = Calc.evaluateJe(word, spinner1pos, spinner2pos);
        ((TextView) findViewById(R.id.resultJe)).setText(result);

        // run evaluation for Tu and populate textview
        String result = Calc.evaluateJe(word, spinner1pos, spinner2pos);
        ((TextView) findViewById(R.id.resultTu)).setText(result);

        // run evaluation for Il Elle On and populate textview
        String result = Calc.evaluateJe(word, spinner1pos, spinner2pos);
        ((TextView) findViewById(R.id.resultIllElleOn)).setText(result);

        // Continue for rest of options

    }
}

请加

onClick="onClick" 

到 XML 中的按钮(这将在活动中调用 onClick)

您的 Calc 类应该能够获取您输入的单词和选择框索引(您似乎正在从其他地方获取与此相关的值)并返回字符串以填充 textview

重要的是你的 Calc 类不应该知道你的 Activity

于 2011-10-25T12:28:07.633 回答