2013-05-01 3 views
0

Может кто-то, пожалуйста, помогите мне. У меня возникают трудности с LoadUrl и javascript.LoadUrl Javascript не загружается вообще

Код, показанный, кажется, работает sorta ok (убивает приложение, а затем пытается снова заставить его работать) на моем старом HTC, работающем под управлением 2.3, однако мой Xperia Z, который запускает последний Android, застрял на «Попытке получить комментарии».

Раздел кода он торчит на это InjectJavaScript(), где это не удается LoadUrl (я знаю, что это как onPageFinished никогда не называется). Странная вещь - часть статистики кода работает отлично и ее идентична.

К сожалению его довольно грязный код ...

@SuppressLint("SetJavaScriptEnabled") 
public class MyIceland extends SherlockActivity { 


    private static class FetchMyIceland extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      setDialog("Checking Farera for WoW Data....",2); 
      switch(FETCHFROMMYICELAND){ 
      case 0: //contact Farera for information. 
       Log.i("IcePlan","Farera Check/Empathica Front Page Retrieval..."); 
       MyIceland.url = MainActivity.BASE_URL+"android_get.php?action=myiceland&store="+MainActivity.STORE; 
       try { 
        String Result = HTTPGET(); 
        if(Result.startsWith("no")){ //content for today? 
         setDialog("No WoW Data Available for Today\nAbout to contact Empathica.com....",2); 
         activity.runOnUiThread(new Runnable(){@Override public void run() {MyIceland.FetchFromEmpathica("http://www.iceland.empathica.com/LogonIceland.aspx");;}}); } 
        else{FETCHFROMMYICELAND = 100;} //we do have content... 
       } catch (IOException e1) {Log.i("IcePlan",e1.toString());} catch (Exception e1) {Log.i("IcePlan",e1.toString()); 
       } //we have data for today, so download and sort it. 
      break; 
      case 1: //get comments 
       setDialog("About to Contact Empathica.com for Comments....",2); 
       try {Thread.sleep(1000);} catch (InterruptedException e) {Log.i("IcePlan",e.toString());} 
       activity.runOnUiThread(new Runnable(){@Override public void run() {MyIceland.FetchFromEmpathica("http://v2.empathica.com/Reporting1/ClientReporting/LiveDataReporting.aspx?RID=1&PID=Comments&TID=1a");}}); 
       break; 
      case 2: //POST data 
       setDialog("Posting all data to Farera.com \n So we don't have to do this again today....",2); 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       try {params.add(new BasicNameValuePair("frontpage", URLEncoder.encode(FRONTPAGE, "utf-8")));} catch (UnsupportedEncodingException e) {Log.e("IcePlan",e.toString());} 
       try {params.add(new BasicNameValuePair("comments", URLEncoder.encode(COMMENTS, "utf-8")));} catch (UnsupportedEncodingException e) {Log.e("IcePlan",e.toString());} 

       MyIceland.url = MainActivity.BASE_URL+"android_get.php?action=store_myiceland&store="+MainActivity.STORE; 
       String POST = HTTPPOST(params); 
       if(POST != null){FETCHFROMMYICELAND = 100; } 

       break; 


      } 

      return null; 
     } 
     @Override 
     protected void onPreExecute(){super.onPreExecute();} 
     @Override 
     protected void onPostExecute(Void arg0){ 

      if(FETCHFROMMYICELAND == 100) new MyIceland.DisplayMyIceland().execute(); 
      } 

    } 
    //------------------------------------------------------ 
    //----------------------------------------------------- 
    //----------------------------------------------------- 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_iceland); 
     ctx = getApplicationContext(); 
     activity = this; 
     //webView2 = (WebView) findViewById(R.id.myIwebview2_widget); 
     /********************************************************/ 
     /****************** ABS ********************************/ 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().show(); 
     // This is a workaround for http://b.android.com/15340 from 
     // http://stackoverflow.com/a/5852198/132047 

     BitmapDrawable bg = (BitmapDrawable) getResources().getDrawable(
       R.drawable.bg_striped); 
     bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); 
     getSupportActionBar().setBackgroundDrawable(bg); 

     BitmapDrawable bgSplit = (BitmapDrawable) getResources().getDrawable(
       R.drawable.bg_striped); 
     bgSplit.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); 
     getSupportActionBar().setSplitBackgroundDrawable(bgSplit); 
     /************************************************************/ 
     try { 
      ov_e = (TextView) findViewById(R.id.overall_exp_tx); 
      ov_r= (TextView) findViewById(R.id.overall_rank_tx); 
      s_e= (TextView) findViewById(R.id.storeexp_tx); 
      st_e= (TextView) findViewById(R.id.staffexp_tx); 
      t_e= (TextView) findViewById(R.id.tillexp_tx); 
      res= (TextView) findViewById(R.id.responses_tx); 
      res_r= (TextView) findViewById(R.id.resp_rank_tx); 

      MyIceland.list = (ListView) findViewById(R.id.wow_lv); // set list 
      MyIceland.adapter = new SeparatedListAdapter(ctx, false); // initialise adapter 
      //authenticate 
      CookieSyncManager.createInstance(this); 
      SetUp(); //Set up webView 
      setDialog("Loading MyIceland data...\n Please be Patient...",0); 
      new FetchMyIceland().execute(); //get data 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      Log.i("IcePlan",e.toString()); 
     } 

    } 

    private static String HTTPPOST(List<NameValuePair> params){ 
     String Resp = null; 
     try { 
      HttpClient client = new DefaultHttpClient(); 
      String postURL = MyIceland.url; 
      HttpPost post = new HttpPost(postURL); 
       //List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       //params.add(new BasicNameValuePair("user", "kris")); 
       UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params,HTTP.UTF_8); 
       post.setEntity(ent); 
       HttpResponse responsePOST = client.execute(post); 
       HttpEntity resEntity = responsePOST.getEntity(); 
       if (resEntity != null) { 
        Resp = "not null"; 

       } 
     } catch (Exception e) { 
      Log.e("IcePlan HTTPPOST",e.toString()); 
     } 
     return Resp; 
    } 
    private static String HTTPGET() throws Exception, IOException{ 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(url); 
     HttpResponse response = client.execute(request); 
     InputStream in = response.getEntity().getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     StringBuilder str = new StringBuilder(); 
     String line = null; 
     while((line = reader.readLine()) != null) 
     { 
      str.append(line); 
     } 
     in.close(); 
     Log.i("IcePlan",str.toString()); 
     return str.toString(); 
    } 
    private void SetUp(){ 
     webView = (WebView) findViewById(R.id.myIwebview_widget); //load custom webview 
     webView.clearView(); //clear view of browser 
     webView.clearFormData(); //clear form data 
     webView.setNetworkAvailable(MainActivity.isOnline(ctx)); //set network state 
     webView.getSettings().setDomStorageEnabled(true); 
     webView.getSettings().setPluginsEnabled(false); //no flash 
     webView.getSettings().setJavaScriptEnabled(true); // enable javascript 
     webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); 
     webView.getSettings().setSavePassword(false); //don't show password dialog 
     webView.setVerticalScrollBarEnabled(false); //no scrolling! 
     webView.setHorizontalScrollBarEnabled(false); //no scrolling! 
     webView.getSettings().setLoadsImagesAutomatically(false); // NO Images 
     webView.getSettings().setSaveFormData(false); //Don't save form data 

     //webView.setVisibility(View.VISIBLE); 
     return; 
    } 
    private static void FetchFromEmpathica(String EmpathURL){ 

    /***************************************************** 
    * setWebViewClient to load pages 
    ***************************************************** 
    ***************************************************** 
    */ 
    webView.loadUrl(EmpathURL); 
    MyIceland.page = 0; 
    webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      //Log.i("IcePlan",url); 
       view.loadUrl(url); 
       return true; 
       } 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      Log.i("IcePlan","Starting..."); 
      super.onPageStarted(view, url, favicon); 

     } 
      @Override 
      public void onPageFinished(WebView view, String url) { 

       Log.i("IcePlan","Loaded..."); 
       switch(FETCHFROMMYICELAND){ 
       case 0: 
        if(MyIceland.page == 0){ 

         MyIceland.page=1; 
         try {Thread.sleep(500);}catch (InterruptedException e) {Log.e("IcePlan",e.toString());} 
         view.loadUrl("javascript: {" + 
            "document.forms[0].elements['userNameBox'].value = 'xxx.xxxxx';" + 
            "setTimeout(function(){document.forms[0].elements['passwordBox'].value = 'xxxxxxx';},300);" + 
            "setTimeout(function(){document.forms[0].elements['loginButton'].click();},300); };"); 
        }else if(MyIceland.page == 1){ 
         MyIceland.page=2; 
         try {Thread.sleep(1000);}catch (InterruptedException e) {Log.e("IcePlan",e.toString());} 

         String oAuthUrl=("v2.empathica.com"); 
         if(url.indexOf(oAuthUrl) > -1) 
         { 
          Log.i("Contains","Auth URL"); 
           InjectJavaScript(view); 
         }else{view.loadUrl("javascript:{};");} 
        }else if (MyIceland.page ==2){ 
         if(MyIceland.FRONTPAGE == null){ 
         Log.i("IcePlan","Inject"); 
         InjectJavaScript(view); 
         }else{MyIceland.page=3;} 

        } 
        break; 
       case 1: 
         if(MyIceland.COMMENTS == null){ 
          Log.i("IcePlan","Inject Comments"); 
          InjectJavaScript(view); 
         }else{MyIceland.page=100;} //else end 

        break; 
       } 

       super.onPageFinished(view, url); 
      } 
     }); 
    return; 

} 



    } 
    private static void setDialog(final String msg, final int dothis){ 
     activity.runOnUiThread(new Runnable() { 
       @Override 
      public void run() { 
     switch(dothis){ 
     case 0: //set up and show 
      if (dlg == null) { 
       dlg = new ProgressDialog(activity); 
       dlg.setTitle("Loading..."); 
       dlg.setMessage(msg); 
       dlg.setCancelable(activity.isFinishing()); 
       dlg.show(); 
      } 
      break; 
     case 1: //remove and reset to null 
      if (dlg.isShowing() || dlg!=null) { 
       dlg.hide(); 
       dlg = null; 
      } 
      break; 
     case 2: 
      if (dlg.isShowing() || dlg!=null) { 
       dlg.setMessage(msg); 
      } 
     } 
       }}); 
     return; 
    } 

/********************************************************* 
* HACK - Inject Javascript to get the HTML we want! 
*********************************************************/ 
    private static void InjectJavaScript(WebView view){ 
     switch(FETCHFROMMYICELAND){ 
     case 0: //get front page 
      setDialog("Attempting to get Statistics...",2); 
     view.loadUrl("javascript:{" + 
       "var element = document.getElementById('ReportDivFPRank');"+ 
       "if (typeof(element) != 'undefined' && element != null)"+ 
       "{" + 
       "var e=document.getElementById(\"ReportDivFPCR\");"+ 
       "var content=e.innerHTML;"+ 
       "window.HTMLOUT.processHTML(content);"+// exists. 
       "}" + 
       "};"); 
     break; 
     case 1: //get comments 
      setDialog("Attempting to get Comments....",2); 
      view.loadUrl("javascript:{" + 
        "var element = document.getElementById('AddNPSDetails');"+ 
        "if (typeof(element) != 'undefined' && element != null)"+ 
        "{" + 
        "var e=document.getElementById(\"_ctl1_ReportDiv\");"+ 
        "var content=e.innerHTML;"+ 
        "window.HTMLOUT.processHTML(content);"+// exists. 
        "}" + 
        "};"); 
      break; 
     } 
     return; 
     } 
    /********************************************************* 
    * Class injected into Empathica website to get HTML 
    * Continues onto our controlling AsyncTask 
    * @author Vince 
    * 
    ********************************************************/ 
    public static class MyJavaScriptInterface 
     { 

      public void processHTML(final String html) 
      { 
       setDialog("Caught RAW data....",2); 
       if(html != ""){ 
        //MyIceland.webView2.loadDataWithBaseURL("notreal/", html, "text/htm", "utf-8",null); 
        if(FETCHFROMMYICELAND == 0){ setDialog("Retrieved Area Statistics....",2); MyIceland.FRONTPAGE = html;} 
        else if(FETCHFROMMYICELAND == 1){ setDialog("Retrieved Area Comments....",2); MyIceland.COMMENTS = html;} 
        FETCHFROMMYICELAND++; 
        new MyIceland.FetchMyIceland().execute(); 

        } 

      return; 
      } 
      } 

} 
+0

Xperia Z android 4.1.2. Просто протестированный код в эмуляторе 4.1.2, и он отлично работает ... есть что-то не так с Xperia Z? – Biosonik

ответ

0

Я вижу, что FetchFromEmpathica будет называться еще раз, когда вы загрузите вторую страницу, и вы снова установить в new WebViewClient() в WebView, положил его на setup(), поэтому он будет называться один раз.

Убедитесь, что ваш Xperia является 4.1.2, тем не менее, посмотрим, что упоминается на

Reference: JavascriptInterface methods in WebViews must now be annotated

Начиная с версии Android 4.2, вы теперь должны явно аннотирования публичные методы с @JavascriptInterface в порядке чтобы сделать их доступными из размещенного JavaScript. Обратите внимание, что это также вступает в силу только в том случае, если вы установили minSdkVersion или targetSdkVersion вашего приложения на 17 или выше.

Добавьте его и import android.webkit.JavascriptInterface

Поэтому код будет уточненный до последних версий.

 @JavascriptInterface 
     public void processHTML(final String html) 
     { 
     //code 
     } 
Смежные вопросы