2012-06-12 152 views
2

在我的项目中,首先,我从数据库中获得了几个字符串,然后我将每个字符串标记为<li>并将它们追加到空的<ul>调用javascript函数。每当我修改代码并运行它,第一次,js函数似乎没有被执行,但是当我再次运行它时,js工作,所有字符串已被添加到<ul>,作为<li>。只要我从不修改代码,应用程序工作正常,这意味着如果我重新安装它在移动js不起作用,直到第二次打开此应用程序。数据库没有什么问题。我认为问题是web视图在js执行之前被绘制,然后当webview被重新绘制时,一切都很顺利。在第一次运行应用程序时,执行javascript与WebView.loadUrl不起作用

这里是我的activity.java

public class WebView_testActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    WebView web = (WebView)findViewById(R.id.web_content); 
    webView_handler(web); 
    data_handler(web); 
    Log.d(MyLog.LOG, "end of file"); 

} 

private void webView_handler(WebView web){ 

    web.loadUrl("file:///android_asset/FormPanel.html"); 
    web.getSettings().setJavaScriptEnabled(true); 

} 

private void data_handler(WebView web){ 
    boolean hasSD = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 
    //String SDPATH = Environment.getExternalStorageDirectory().getPath(); 


    if(hasSD){ 

     DbHelper data_helper = new DbHelper(this, "/mnt/sdcard/CTIL/QuestionDB/Q1.db"); 
     SQLiteDatabase database = data_helper.getReadableDatabase(); 
     String sql = "SELECT pe.Description FROM tblFormEngine_PoolElement pe " + 
       "NATURAL JOIN tblFormEngine_FormElement fe WHERE fe.PanelID = 1"; 
     Cursor c = database.rawQuery(sql,null); 

     if(c.getCount() == 0) 
      Log.d(MyLog.LOG, "empty");  

     c.moveToFirst(); 

     if(!c.isAfterLast()){ 

      do{ 
       String description = c.getString(0); 
       String html = "<li><p>" + description + "</p></li>"; 
       Log.d(MyLog.LOG, html); 
       //web.loadUrl("javascript:Element_AppendHTML('content',\""+html+"\")"); 
       MyThread mt = new MyThread(web, html); 
       mt.start(); 
      }while(c.moveToNext()); 
     } 

     c.close(); 
     database.close(); 

    } 

} 

private class MyThread extends Thread{ 

    private WebView web; 
    private String html; 


    MyThread(WebView web, String html){  
     this.web = web; 
     this.html = html; 
    } 

    public void run(){ 
     try { 
        web.loadUrl("javascript:Element_AppendHTML('content',\""+html+"\")"); 
      sleep(500); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 
} 

这里的js函数(这是一个jQuery函数实际上):

function Element_AppendHTML(ElementID,HTML) 
{ 
    $("#"+ElementID).append(HTML); 
} 

以下是原始的HTML文件,如果你需要看看:

<html> 
<head> 
<title>Form Panel</title> 
<meta charset="utf-8"> 
<link rel="stylesheet" href="theme/FormPanel_Basic.css"> 
<script type="text/javascript" src="js/jquery-1.5.1.js"></script> 
<script type="text/javascript" src="js/jquery.scrollTo-1.4.2-min.js"></script>  
<script type="text/javascript" src="js/jquery.scrollToMe.js"></script> 
<script type="text/javascript" src="js/FormPanel.js"></script> 
</head> 
<body>  

<ul id="content" selected="true"> 


</ul> 

</body> 
</html> 

任何建议?

+0

你好,你解决了这个问题吗?我现在正在解决这个问题....不明白为什么...... –

回答

2

web.loadUrl("file:///android_asset/FormPanel.html"); 
web.getSettings().setJavaScriptEnabled(true); 

变化

web.getSettings().setJavaScriptEnabled(true); 
web.loadUrl("file:///android_asset/FormPanel.html"); 

不打电话使用loadURL完成安装后?

相关问题