0

Android コードの次のブロックは、javascript 関数から戻り値を取得し、それをクラス変数に割り当てようとします。その後、別のクラスをインスタンス化するときにこのクラス変数を使用します。

これは私のコードです:

      //class variables
                String innerElementNum = "0";
                private final Object lock = new Object();
                MyAdapter myAdapter;

            synchronized (lock) {
                try {
                    webView.loadUrl("javascript:inner()");
                    while (responseFromJS.equals(""))
                        lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                (!responseFromJS.equals("empty"))
                    innerElementNum = responseFromJS;
                }
                responseFromJS = "";
            }

        myAdapter = new MyAdapter(EditorActivity.this);

MyAdapter クラスでは、次のように変数「innerElementNum」を使用します。

public class MyAdapter extends BaseAdapter {

       Context context;

       int itemsNum = Integer.parseInt(innerElementNum); 
       String[] itemsArray = new String[itemsNum];


       MyAdapter(Context c){
           context = c;
           if (itemsNum > 0) {
           for (int i=0 ; i<itemsNum ; i++) {
               int j = i+1; 
               itemsArray[i] = j+"";
           }
           }
       }
       ....... etc
}

私の問題は同期です。 MyAdapter クラスをインスタンス化するとき、「innerElementNum」変数には「未定義」の値があります。つまり、クラスをインスタンス化するとき、変数にはまだ正しい値がありません。

どんな助けでも大歓迎です。前もって感謝します

4

1 に答える 1

1

「未定義」はJavascript固有です。あなたはほぼ確実に次のようなjsonを解析しています

{
   elementNum: "undefined"
}

これは並行性とは何の関係もないようです。

あなたが言う時

「未定義」の値、つまり、クラスをインスタンス化するとき、変数にはまだ正しい値がありません。

String num = "undefined"Javaで技術的に割り当てられています。このjsonを構築しているJavascriptを修正する必要があると思います。

また、補足として:

==オペレーターによる文字列の等価性をテストするべきではありません。これは、コンテンツではなく、参照の等価性をテストします。使用する必要があります.equals

于 2012-05-18T17:33:02.353 に答える