2010-07-05 13 views
19

मैं वेबव्यू से "404 पृष्ठ नहीं मिला" देखना चाहता हूं और यदि यह 404 है तो मैं पिछले पृष्ठ पर वापस लौटता हूं। आपकी मदद के लिए टाईयदि कोई पृष्ठ "404 पृष्ठ नहीं मिला" है तो मैं एंड्रॉइड वेबव्यू से कैसे देख सकता हूं?

उन वेबपृष्ठों को भी संपादित करें जिन्हें मैं देखना चाहता हूं शुद्ध हैं .jpg 1.jpg 2.jpg 3.jpg लेकिन मुझे कोई जानकारी नहीं है कि कितनी छवियां मौजूद हैं। तो अगर कोई अन्य विधि का प्रस्ताव दे सकता है, तो ऐसा करने के लिए उसका स्वागत है।

+0

आप [इस सूत्र] की जाँच कर सकते हैं (http://groups.google.com/group/android-developers/browse_thread/thread/1d2f0b04b2818181/) android-डेवलपर्स से समूह। –

उत्तर

-4

अपने WebView है, जहां आप onReceivedError() ओवरराइड 404 प्रतिक्रिया के बारे में पता लगाने के लिए करने के लिए एक WebViewClient संलग्न करें - यह है कि शायद ERROR_FILE_NOT_FOUND के रूप में लौटा दी जाएगी।

+13

'ऑन रिक्वेस्ड एरर' विधि पर HTTP स्थिति त्रुटियों की रिपोर्ट नहीं की गई है। [दस्तावेज़ीकरण] देखें (http://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedError%28android.webkit.WebView ,%20int,%20java.lang.String,%20java.lang.String % 2 9) – Mannaz

+0

[आपके द्वारा लिंक किए गए दस्तावेज़] (http://goo.gl/LcFBo) आपके साथ सहमत नहीं है। 'ERROR_' स्थिरांक विभिन्न HTTP त्रुटियों के लिए हैं (उदा।,' ERROR_FILE_NOT_FOUND')। – CommonsWare

+0

ठीक है, प्रलेखन अभी भी स्पष्ट नहीं हो सकता है। मैंने इस विधि को लागू किया और 404 साइट लोड होने पर इसे कॉल नहीं किया जाता है।इस मुद्दे पर एक स्पष्टीकरण और एक बयान के लिए [यह धागा] (https://code.google.com/p/android/issues/detail?id=968#c3) देखें। – Mannaz

4

मैं 404 पेज लोड करने का पता लगाने की कोशिश करता हूं। आप WebViewClient कक्षा में shouldOverrideUrlLoading विधि को लागू करके ऐसा कर सकते हैं।

mGenericWebClient = new GenericWebClient(); 
mWebView.setWebViewClient(mGenericWebClient); 

public class GenericWebClient extends WebViewClient { 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { 
     if (url=="your404page.html") { 
      view.goBack(); 
      return true; 
     } 
     return false; 
    } 
} 

तुम भी onReceivedError घटना दिखाई देता है तो जांच कर सकते हैं, जब 404 त्रुटि तब होती है।

+4

क्या होगा अगर 404 पेज मेरे द्वारा नियंत्रित नहीं है? कुछ अज्ञात साइट पर जाकर 404 रिटर्न मिलता है? –

3

आप अगर यह एक 404 त्रुटि में परिणाम की जांच करने के लिए पूरी तरह से पेज लोड करने के लिए की जरूरत नहीं है:

private int getRange() { 
    try { 
     HttpURLConnection.setFollowRedirects(false); 
     int Count = 1; 
     URL testURL; 
     while (true) { 
      testURL = new URL(
        (myURL + "/" + Integer.toString(Count++) + ".jpg")); 
      HttpURLConnection con = (HttpURLConnection) testURL 
        .openConnection(); 
      con.setRequestMethod("HEAD"); 
      if (con.getResponseCode() == 404) { 
       return Count - 2; 
      } 
      Log.e("RESPONCE", Integer.toString(con.getResponseCode())); 
     } 
    } catch (Exception e) { 

    } 
    return 1; 
} 
+2

इसका वेबव्यू के साथ कुछ लेना देना नहीं है, जो मूल प्रश्न था। –

+3

मैं इस उत्तर के निम्न-वोटों से भिन्न होना चाहता हूं। इस उत्तर के तीन साल बाद एंड्रॉइड 'वेब व्यू' पोस्ट किया गया था, अभी भी वर्तमान लोड किए गए पृष्ठ की HTTP स्थिति की जांच करने के किसी भी साधन की पेशकश नहीं करता है। यह बाहरी समाधानों के साथ डेवलपर को छोड़ देता है, जैसे @ कमजोरवायर का योगदान। यह समझा जाना चाहिए कि सुझाए गए समाधान को "पूर्व-सत्यापन" चरण के रूप में उपयोग किया जाना चाहिए, (और यदि) 'वेबव्यू' पर यूआरएल लोडिंग को प्रतिनिधिता से पहले)। मैं कोड गुणवत्ता को असम्बद्ध छोड़ना चुनता हूं, हालांकि। – dbm

+0

ऐसा लगता है कि यह अभी भी अप्रैल 2017 में मामला है, आह? @ डीबीएम – AlexioVay

-4

आप पृष्ठ का वेब दृश्य में लोड कर रहा है के वेबमास्टर हैं, तो आप की तरह अपने पृष्ठ का शीर्षक सेट कर सकते हैं '404'। फिर आपके पृष्ठ को लोड करने के बाद आप getTitle() विधि के साथ पृष्ठ का शीर्षक प्राप्त कर सकते हैं। फिर यदि इसमें 404 है या यदि यह आपके पृष्ठ शीर्षक से अलग है तो आप जो भी चाहते हैं वह कर सकते हैं।

उदाहरण:

myView.setWebViewClient(new WebViewClient(){ 
    @Override 
     public void onPageFinished(WebView view, String url) { 
      String pageTitle = myView.getTitle(); 
      Toast.makeText(getBaseContext(), pageTitle, Toast.LENGTH_SHORT).show(); 
     } 
}); 
+0

शीर्षक लौटाया जा सकता है या इसमें 404 नहीं हो सकता है। विभिन्न प्लेटफार्म और/या डिवाइस एक अलग शीर्षक नाम वापस कर सकते हैं। –

+0

मैंने अपना जवाब संपादित किया है, जैसे कि उपयोगकर्ता पृष्ठ का वेबमास्टर है। – themaster33

13

मैं कुछ साल बहुत देर हो चुकी हो सकता है, लेकिन यहाँ मैं कैसे के बाद से इन उत्तरों से कोई भी काम इसे हल करने के लिए किया था है।

मैं उस साइट से पृष्ठ के शीर्षक (इस मामले में "पृष्ठ नहीं मिला") के साथ खिताब की तुलना में समाप्त हुआ और शीर्षक खोलने की कोशिश कर रहा था।

webview.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public void onReceivedTitle(WebView view, String title) { 
      // TODO Auto-generated method stub 
      super.onReceivedTitle(view, title); 


      CharSequence pnotfound = "The page cannot be found"; 
      if (title.contains(pnotfound)) { 
       pagenotfound = true; 
       view.stopLoading(); 
       webview.loadUrl("https://www.google.com/search?hl=en&q=stackoverflow"); 

      } 
     } 

     public void onProgressChanged(WebView view, int progress) { 
      activity.setProgress(progress * 1000); 
     } 
    }); 

webview.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onReceivedError(WebView view, int errorCode, 
       String description, String failingUrl) { 

      Toast.makeText(activity, "Oh no! " + description, 
        Toast.LENGTH_SHORT).show(); 

     } 

     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 

      return true; 
     } 

     public void onPageFinished(WebView view, String url) { 
      if (dialog.isShowing()) { 
       dialog.dismiss(); 

      } 
     } 
    }); 

"pnotfound" साइट से साइट पर अलग होगा। लेकिन आमतौर पर एक साइट एक ही "पृष्ठ नहीं मिला" का उपयोग करती है, इसलिए आप साइट पर शीर्षक का उपयोग कर सकते हैं। यदि आप एकाधिक साइटों का उपयोग कर रहे हैं तो आप एक और जोड़ना चाहेंगे।

उम्मीद है कि यह किसी के लिए मदद करता है।

+0

इस हैक प्रदान करने के लिए धन्यवाद। ऐसा लगता है कि 404 को समझने के लिए सीधा-आगे (गैर-हैकी) तरीका नहीं है। –

+0

यह एक अच्छा जवाब है !! यह निश्चित रूप से मेरे लिए काम करता है और दीवार के खिलाफ मेरे सिर को टक्कर देने के घंटे बचाता है !!! साझा करने के लिए धन्यवाद!!! – jabobadilla

+0

चालाक होने पर, यह एक अच्छा समाधान नहीं है। आप किसी नेटवर्क त्रुटि का पता लगाने के लिए एंड्रॉइड के स्टॉक "वेबपृष्ठ उपलब्ध नहीं" की जांच करने के लिए लुभाने के लिए प्रेरित हो सकते हैं लेकिन ध्यान रखें कि यह किसी अन्य भाषा के लिए टूट जाएगा (और ओएस का उल्लेख नहीं है कि भविष्य में यह शीर्षक बदल सकता है)। –

0
@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
    String pageTitle = myWebView.getTitle(); 
    String[] separated = pageTitle.split("-"); 
    if(separated[0].equals("404")) { 
     Log.i(TAG, "detect page not found error 404"); 
    } 
    else { 
     findViewById(R.id.progress1).setVisibility(View.GONE); 
    } 
} 
11

एसडीके 23 (एंड्रॉयड एम) शुरू आप 404 और अन्य HTTP त्रुटियों को पकड़ने के लिए onReceivedHttpError विधि का उपयोग कर सकते हैं। बस के अंदर ओवरराइड अपने WebViewClient

@Override 
public void onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { 
    Toast.makeText(view.getContext(), "HTTP error "+errorResponse.getStatusCode(), Toast.LENGTH_LONG).show(); 
} 
+1

यह उत्तर – rmoore

+0

स्वीकार किया जाना चाहिए ... ब्रो थेंक्स .... – Hanuman

+1

ध्यान रखें कि 'इस कॉलबैक को किसी भी संसाधन (iframe, image, आदि) के लिए बुलाया जाएगा, न केवल मुख्य पृष्ठ के लिए - - से दस्तावेज़ – Aba

संबंधित मुद्दे