0

さて、私は同じことについて他の大量の質問を検索しましたが、どういうわけかそれらの解決策のどれも私の問題にはうまくいきませんでした。これが私の問題です。EditTextから文字列にテキストを取得する必要があるとすぐにAndroidアプリがクラッシュします。私は私の「メイン」を持っています-ここでの活動:

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-layoutは次のようになります:

<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」クラスから変数にアクセスできないことです。私が探しているのは、スピナーとEditTextを公開する方法だと思います。

さて、私はdtenからの解決策に従いました、そして今それはうまくいきます!

4

2 に答える 2

1

コードに見られる問題の1つは、オブジェクトを2回宣言していることです。

あなたが取ったあなたの活動で見てください

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);

onCreate of testfre Activityで、上記のコードを以下のコードに置き換えてみてください。

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から1つの静的なものを参照しています(名前には大文字が必要です)。これは静的であるという意味ではありませんが、Calcメソッドが静的であるため静的に設定されているようです。

calcクラスのtestfreから、testfreにも存在しないものを参照しています。

それは1つの非常識な混乱です

キーダウンで使用するよりもキーリスナーラーテンを設定するのはなぜですか

静的クラスからのアクティビティにある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クラスは、入力した単語と選択ボックスのインデックス(これに関連する値を他の場所から取得しているようです)を取得して、テキストビューに入力する文字列を返すことができるはずです。

重要なことは、あなたのCalcクラスはあなたの活動について何も知らないはずです

于 2011-10-25T12:28:07.633 に答える