2016-10-24 81 views
10

için bir bağlantı görmedim Şu anda d3 üzerinden bir web görünümünde veri üzerinde grafik üzerinde çalışıyorum. Doğal olarak, grafiği yeniden yüklemeyi ve yeni verileri beslemeyi denediğimde işler bozuluyor. Bu güzel çizgi haşhaş devam ediyor: W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid.Birisi ve her şey için lütfen açıklamayız Called kararsızlık() - pid

Bir açıklama için SO'ya baktım, ama kesin bir şey yok gibi görünüyor. Kullanıcılar web depolama alanlarındaki DOM depolama alanını açmayı önerdiler (ki bu sorunu açıkça gidermiyor). Grafiği yeniden yüklemek ve yeni verileri beslemek arasında bir yarış durumu olduğundan şüpheleniyorum. WebViewClient'imde, veriyi tabloya yüklemek için dinleyiciyi çağırmak, yarış koşulunu çözeceğini düşünerek, ancak boşuna olmak için WebPageFinished() 'i geçersiz kıldım.

Birisi bana W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid'un ne anlama geldiğini açıklayabilir mi? Değerlendirmemde mi kaldım? Bunu nasıl ayıklayabilirim?

Herhangi bir ipucu takdir edilmektedir.

DÜZENLEME: Orijinal sorunu çözdüm, ancak bu satırın ne anlama geldiğini öğrenmek isterim. Ödül al.

+0

Grafiği nasıl aradığınızı göstermek için kaynak kodu ekleyebilir misiniz?Ayrıca, ne kadar veri iletiyorsunuz? – SJoshi

cevap

6

Ardışık loadUrl çağrıları, bir yarış koşuluna neden olur. Sorun şu ki, loadUrl("file://..") hemen tamamlanmaz ve bu nedenle loadUrl("javascript:..") numaralı telefonu aradığınızda, bazen sayfa yüklenmeden önce yürütülür.
Bu nasıl kurulum benim webview:

wv = (CustomWebView) this.findViewById(R.id.webView1); 

WebSettings wv_settings = wv.getSettings(); 

//this is where you fixed your code I guess 
//And also by setting a WebClient to catch javascript's console messages : 

wv.setWebChromeClient(new WebChromeClient() { 
     public boolean onConsoleMessage(ConsoleMessage cm) { 
      Log.d(TAG, cm.message() + " -- From line " 
        + cm.lineNumber() + " of " 
        + cm.sourceId()); 
      return true; 
     } 
    }); 
wv_settings.setDomStorageEnabled(true); 

wv.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      setTitle(view.getTitle()); 
      //do your stuff ... 
      } 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("file")) 
     { 
      // Keep local assets in this WebView. 
      return false; 
     } 
     } 
    }); 

//wv.setWebViewClient(new HelpClient(this));// 
wv.clearCache(true); 
wv.clearHistory(); 
wv_settings.setJavaScriptEnabled(true);//XSS vulnerable 
wv_settings.setJavaScriptCanOpenWindowsAutomatically(true); 
wv.loadUrl("file:///android_asset/connect.php.html"); 

NOT bu hat API düzeyinde ise wv.setWebChromeClient(new WebChromeClient());

19 (KitKat Android 4.4), tarayıcı motoru için Android webkit anahtarlamalı chromium webkit, hemen hemen tüm orijinal WebViewAPI's sayacına sarılmış chromium webkit'un parçaları.

@Override 
public void determinedVisibility(int pid) { 
    ManagedConnection managedConnection; 
    synchronized (mManagedConnections) { 
     managedConnection = mManagedConnections.get(pid); 
    } 
    if (managedConnection == null) { 
     Log.w(TAG, "Cannot call determinedVisibility() - never saw a connection for the pid: " 
       + "%d", pid); 
     return; 
    } 


Bu içerikten uyarı bir yerinde oldu:

BuChromium source itibaren hata (BindingManagerImpl.java) verir yöntem olduğunu.
github kaynak kodunda sonsuza kadar kazabilirsiniz, yöntem determinedVisibility (BindingManagerImpl.java içinde) uygulamasının nereden geldiğini görmek güzel olabilir ... (Uygulama için "Impl" soneki). Bu yardımcı olur umarım; 0)

+0

Teşekkürler. Bu günlük mesajın arkasındaki mantığa kesinlikle ışık tutuyor. – Vas

+0

@Vas lütuf Vas için teşekkürler, bu github kaynak kodunda sonsuza kadar kazmak olabilir, söz konusu yöntem nerede denir görmek güzel olabilir, belki biraz zaman alırsanız .... –

2

Bu yöntem genellikle shouldOverrideUrlLoading() yöntemini geçersiz kıldığınızda ortaya çıkar.

WebView'üm, önceki uygulamalarda, WebView'da neyin işlenmekte olduğu, yukarıdaki yöntemde yakalanan ve sırayla dikkate alınmadığı için kullanılır. Yüklediğim web siteleri, izin verilen etki alanının dışında komut dosyalarını yüklemeyi denediğinde bunu çok görüyorum.