2012-04-18 22 views
10

मुझे एक फॉर्म (पोस्ट) युक्त एचटीएमएल के साथ WebView मिला है। कुछ सबमिट बटन पर क्लिक करते समय मुझे एक JSON प्रतिक्रिया मिलती है।वेबव्यू में POST अनुरोध के JSON प्रतिक्रिया को मैं कैसे प्राप्त कर सकता हूं?

मैं यह JSON कैसे प्राप्त कर सकता हूं?

यदि मैं अनुरोध को अवरुद्ध नहीं करता हूं तो जेसन को वेबव्यू पर प्रदर्शित किया जाता है, तो मुझे लगता है कि मुझे shouldInterceptRequest (मैं एपीआई 12 का उपयोग कर रहा हूं) का उपयोग करना चाहिए, लेकिन मुझे नहीं पता कि इसमें जेसन कैसे प्राप्त करें।

या शायद एक बेहतर तरीका है, जैसे अनुरोध के बजाय प्रतिक्रिया को रोकना?

mWebView.loadUrl(myURL); 

isPageLoaded = false; // used because the url is the same for the response 

mWebView.setWebViewClient(new WebViewClient() { 
    @Override 
    public WebResourceResponse shouldInterceptRequest (WebView view, String url) { 

     if(isPageLoaded){ 
      // get the json 
      return null; 
     } 
     else return super.shouldInterceptRequest(view, url); 
    } 

    public void onPageFinished(WebView view, String url) { 
     isPageLoaded = true; 
    } 
}); 

धन्यवाद

उत्तर

4

आप WebViewClient

@Override 
public boolean shouldOverrideUrlLoading (WebView view, String url) { 

    if(flag) { 

      URL aURL = new URL(url); 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      // read inputstream to get the json.. 
      ... 
      ... 
      return true; 
    } 

    return false 
} 

@override 
public void onPageFinished (WebView view, String url) { 
    if (url contains "form.html") { 
     flag = true; 
    } 
} 

की shouldOverrideUrlLoading विधि ओवरराइड करना चाहिए इसके अलावा इस How do I get the web page contents from a WebView?

+0

यह काम नहीं करता है क्योंकि यूआरएल फॉर्म के साथ एक जैसा है, और आपके समाधान के साथ मुझे फॉर्म के साथ एचटीएमएल मिलता है। अनुरोध को अवरुद्ध करने के बजाय, मुझे वेबव्यू में इसे प्रदर्शित करने से पहले प्रतिक्रिया को रोकना चाहिए, या पोस्ट पैराम्स के साथ अनुरोध भेजना चाहिए ... – jul

+0

आपको फॉर्म पेज को अनदेखा करना चाहिए और अगले पृष्ठ लोडिंग को पकड़ना चाहिए ... दस्तावेज़ कहता है "देता है मेजबान एप्लिकेशन को वर्तमान वेबव्यू में एक नया यूआरएल लोड होने के बारे में नियंत्रण पर लेने का मौका मिलता है। " तो जब फॉर्म लोड पूर्ण हो जाता है तो आपको ध्वज सेट करना चाहिए, और तत्काल लोड होने वाली तत्काल लोडिंग को पकड़ना चाहिए .. – Ronnie

+0

यूआरएल की तुलना न करें .. फ़ॉर्म लोड होने पर और जब जेसन लोड हो रहा है तो यह जानने के लिए ध्वज सेट करें .. – Ronnie

1

ठीक है, संक्षिप्त उत्तर है कि यह काफी shouldOverrideUrlLoading (WebView देखने के लिए, स्ट्रिंग यूआरएल) के लिए इसी तरह काम करता है, के रूप में WebView ट्यूटोरियल में सचित्र है।

आरंभ करने के लिए, नीचे दिए गए कोड को देखें। आप अपने WebViewClient की चाहिएइंटरसेप्टरक्वेट (वेब ​​व्यू व्यू, स्ट्रिंग यूआरएल) विधि को ओवरराइड करें। जाहिर है आपको लगता है कि इनलाइन करने की जरूरत नहीं है, लेकिन सघनता की खातिर कि मैं क्या किया:

this पर एक नजर डालें।

+0

मैंने अधिक स्पष्टता के लिए अपना प्रश्न संपादित किया। – jul

3

पर एक नज़र यहाँ मैं यह कैसे हासिल की के रूप में विधि का उल्लेख किया यूआई धागा नेटवर्क कनेक्शन के बारे में शिकायत करने के लिए शुरू कर दिया है।

का उपयोग ChromeWebView क्लाइंट और कंसोल लॉग ऑन उत्पादन

public void OnSignUp_Click(View v) { 
    WebView mWebview = new WebView(this); 

    mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 

    final Activity activity = this; 

    mWebview.setWebChromeClient(new WebChromeClient() { 
     public boolean onConsoleMessage(ConsoleMessage cmsg) 
     { 

       /* process JSON */ 
      cmsg.message(); 
      return true; 

     } 
    }); 

    mWebview.setWebViewClient(new WebViewClient() { 

     public void onReceivedError(WebView view, int errorCode, 
       String description, String failingUrl) { 
      Log.e("Load Signup page", description); 
      Toast.makeText(
        activity, 
        "Problem loading. Make sure internet connection is available.", 
        Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      view.loadUrl("javascript:console.log(document.body.getElementsByTagName('pre')[0].innerHTML);"); 
     } 
    }); 

    mWebview.loadUrl("https://yourapp.com/json"); 

} 

आशा है कि यह दूसरों मदद करता है।

+0

यह अब तक का सबसे आसान समाधान है और जिसने वास्तव में मेरे लिए काम किया है, एक पुनर्निर्देशित SAML JSON प्रतिक्रिया को पकड़ने के लिए। अतिरिक्त लाभ: यूआई अपवाद पर बेहद सरल और कोई नेटवर्किंग नहीं। – AgentKnopf

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

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