Исключение в команде Object toString () в Android - PullRequest
0 голосов
/ 25 октября 2011

Хорошо, так что я перебрал множество других вопросов на эту же тему, но почему-то ни одно из этих решений не помогло моей проблеме. Итак, вот моя проблема, мое Android-приложение аварийно завершает работу, как только оно получает текст из EditText в строку. У меня есть мой «Основной» -Деятельность здесь:

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 выглядит так: пакет 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 (). Неважно, какая из этих строк стоит первой или где в коде они, это всегда они. Даже перемещение их в 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». То, что я ищу, я думаю, это способ сделать Spinners и EditText общедоступными.

Ну, я следовал решению от dten, и теперь оно работает!

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Одна проблема, которую я вижу в вашем коде, заключается в том, что вы объявляете объекты дважды.

Видите, в вашей активности вы взяли

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

и внутри onCreate of Activity вы снова делаете то же самое:

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

Попробуйте заменить приведенный выше код ниже одногов создании теста деятельности:

ev = (EditText) findViewById(R.id.v);
em =(Spinner) findViewById(R.id.m);
ez = (Spinner) findViewById(R.id.z); 
0 голосов
/ 25 октября 2011

Есть так много проблем с этим кодом, трудно понять, с чего начать

Есть статика, для которой вы создаете дубликаты переменных в методе, но затем пытаетесь ссылаться за пределы

Вы ссылаетесь на один static из вашего testfre (который должен иметь заглавную букву для имени), который вы не имеете в виду как static, но вы, кажется, настроили его как static, потому что ваши методы Calc статические

вы ссылаетесь на вещи из testfre в вашем классе calc, которые даже не существуют в testfre

Это один безумный беспорядок

почему вы устанавливаете список ключей больше, чем используйте при нажатии клавиш

установить текст в вашем тексте редактирования, который находится в вашей активности из статического класса?

пожалуйста, дайте именам переменных не только одну букву

что такое 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 ничего не знал о вашей деятельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...