2016-11-23 3 views
1

Ich lade eine Website in webview, wir haben Ajax in der Website verwendet und funktioniert gut auf Webbrowser und mobile Browser auch, aber in android Webview Ajax funktioniert nicht, kein Fehler ist in der Konsole. hier ist mein Code: -Ajax funktioniert nicht in android webview

public class Activity_WebView extends AppCompatActivity implements 
ConnectivityReceiver.ConnectivityReceiverListener { 
WebView webview; 
ProgressDialog pro_dialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_web_view); 

    webview = (WebView) findViewById(R.id.webview); 
    webview.getSettings().setPluginState(WebSettings.PluginState.ON); 
    webview.setWebViewClient(new loadinsame()); 
    pro_dialog = new ProgressDialog(Activity_WebView.this); 
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.getSettings().setDomStorageEnabled(true); 
    webview.getSettings().setAllowUniversalAccessFromFileURLs(true); 

    boolean connection = checkConnection(); 
    if (connection) { 
     webview.loadUrl("website url"); 
    } else { 
     Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
     internet", Toast.LENGTH_SHORT).show(); 
     dialog_Show(webview, "Please check you Inernet connect and Reload.", 
     false); 
    } 
} 

@Override 
public void onNetworkConnectionChanged(boolean isConnected) { 
    if (!isConnected) { 
     Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
     internet", Toast.LENGTH_SHORT).show(); 
    } 
} 

private class loadinsame extends WebViewClient { 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
     pro_dialog.setCancelable(false); 
     pro_dialog.setMessage("Loading..."); 
     pro_dialog.show(); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
     return true; 
    } 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     pro_dialog.dismiss(); 

    } 

    @Override 
    public void onReceivedError(final WebView webview, WebResourceRequest 
    request, WebResourceError error) { 
     super.onReceivedError(webview, request, error); 
     pro_dialog.dismiss(); 
     // dialog_Show(webview, "Error Occur, Do you want to Reload?", true); 

    } 
} 

@Override 
public void onBackPressed() { 

    if (webview.canGoBack()) { 
     webview.goBack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

private boolean checkConnection() { 
    boolean isConnected = ConnectivityReceiver.isConnected(); 
    return isConnected; 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    MyApplication.getInstance().setConnectivityListener(this); 
} 
} 

wenn ich die Website in Chrom mit Emulator überprüfen, dass meine ajax bleibt anhängig und dann nach einiger Zeit gelöscht werden. Vielen Dank im Voraus.

Antwort

2

Intercept Ihre Ajax-Aufruf von shouldInterceptRequest Überschreiben ist eine solche Art und Weise:

private class LoadInSame extends WebViewClient { 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView webview, WebResourceRequest webrequest) 
    { 
     Log.d("test", "shouldInterceptRequest"); 
     return this.handleRequest(webrequest.getUrl().toString()); 
    } 
    @NonNull 
    private WebResourceResponse handleRequest(@NonNull String urlString) { 
     try { 
      URL url = new URL(urlString); 
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
      connection.setRequestProperty("User-Agent", ""); 
      connection.setRequestMethod("GET"); 
      connection.setDoInput(true); 
      connection.connect(); 

      InputStream inputStream = connection.getInputStream(); 
      return new WebResourceResponse("text/json", "utf-8", inputStream); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
      return null; 
     } 
     catch (ProtocolException e) { 
      e.printStackTrace(); 
      return null; 
     }catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 
} 

Bitte beachten Sie auch JAVA-Namenskonventionen folgen.

+0

Vielen Dank für Ihre Antwort, aber als ich diesen Code in meiner App hinzugefügt hat, wird der gesamte Code in Webview angezeigt. – Pawanpreet

+0

@Pawanpreet, hast du das gelöst? – Tasneem

+0

ja, löste es – Pawanpreet

Verwandte Themen