java线程同步:我得到“未定义的值”

时间:2012-05-18 17:09:05

标签: java android multithreading synchronization

下面的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”变量具有“未定义”值,我的意思是,当我实例化该类时,该变量尚未具有正确的值。

欢迎任何帮助。 提前致谢

1 个答案:

答案 0 :(得分:1)

好“未定义”是特定于Javascript的。你几乎可以肯定解析一个看起来像

的json
{
   elementNum: "undefined"
}

这似乎与并发性没有任何关系。

当你说

  

“undefined”值,我的意思是,当我实例化类时,变量   还没有正确的价值。

String num = "undefined"在技术上是用Java分配的。我认为你需要修复构建这个json的Javascript。

另外作为旁注:

您不应该通过==运算符测试字符串等效性。这测试参考等价而不是内容。您应该使用.equals