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 回答