2012-02-21 3 views
7

Je tente de se connecter à la page en utilisant un HTTP Post. Je fais un poste http pour créer un webview. J'ai besoin de rediriger vers une autre page de la webview. Mais quand le bouton continuer est cliqué, l'exception est levée.réponse HTTP POST dans WebView dans android

Mon code est

public class ZHttpPostProjActivity extends Activity { 
    /** Called when the activity is first created. */ 

    private WebView mWebView; 
    private ProgressDialog progressBar; 
    private static final String TAG = "ZHttpPostProjActivity"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.web_view); 

    mWebView = (WebView) findViewById(R.id.webview); 
    WebSettings webSettings = mWebView.getSettings(); 

    webSettings.setJavaScriptEnabled(true); 
    webSettings.setDomStorageEnabled(true); 

    progressBar = ProgressDialog.show(ZHttpPostProjActivity.this, "", 
     "Loading..."); 

    postData(); 
    } 


    private final String URL_REGISTER = "https://www.paypal.com/checkout"; 

    public void postData() { 

    BufferedReader bufferedReader = null; 

    try { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("username", "username")); 
     nameValuePairs.add(new BasicNameValuePair("password", "password")); 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(URL_REGISTER); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, 
      HTTP.UTF_8)); 

     HttpResponse response = httpclient.execute(httppost); 

     bufferedReader = new BufferedReader(new InputStreamReader(response 
      .getEntity().getContent())); 
     StringBuffer stringBuffer = new StringBuffer(""); 
     String line = ""; 
     String LineSeparator = System.getProperty("line.separator"); 
     while ((line = bufferedReader.readLine()) != null) { 
     stringBuffer.append(line + LineSeparator); 
     } 
     bufferedReader.close(); 

     String webData = stringBuffer.toString(); 
     Log.i(TAG + "web data : ", webData); 

     // String webData = new 
     // BasicResponseHandler().handleResponse(response); 

     Log.i(TAG, "Httppost.getURI().toString(): " 
      + httppost.getURI().toString()); 

     mWebView.setWebViewClient(new WebViewClient() { 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      Log.i(TAG, "Processing webview url click..."); 
      view.loadUrl(url); 
      return true; 
     } 

     public void onPageFinished(WebView view, String url) { 

      Log.i(TAG, "Finished loading URL: " + url); 
      if (progressBar.isShowing()) { 
      progressBar.dismiss(); 
      } 
     } 

     public void onReceivedError(WebView view, int errorCode, 
      String description, String failingUrl) { 
      Log.e(TAG, "Error: " + description + " \n errorCode: " 
       + errorCode + "\n failingUrl: " + failingUrl); 

     } 
     }); 

     // mWebView.loadUrl(httppost.getURI().toString()); 
     mWebView.loadData(webData, "text/html", "UTF-8"); 
     mWebView.loadDataWithBaseURL(httppost.getURI().toString(), webData, 
      "text/html", HTTP.UTF_8, null); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    } 

En cliquant sur le bouton Continuer dans la WebView une exception est levée

02-21 11:42:38.539: E/webviewdatabase(2848): Failed in setFormData 
02-21 11:42:38.539: E/webviewdatabase(2848): java.net.MalformedURLException: Unknown protocol: about 
02-21 11:42:38.539: E/webviewdatabase(2848): at java.net.URL.<init>(URL.java:288) 
02-21 11:42:38.539: E/webviewdatabase(2848): at java.net.URL.<init>(URL.java:157) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.WebViewDatabase.setFormData(WebViewDatabase.java:1032) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.BrowserFrame.loadStarted(BrowserFrame.java:384) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.JWebCoreJavaBridge.sharedTimerFired(Native Method) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.JWebCoreJavaBridge.fireSharedTimer(JWebCoreJavaBridge.java:91) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:108) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.os.Looper.loop(Looper.java:123) 
02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:673) 
02-21 11:42:38.539: E/webviewdatabase(2848): at java.lang.Thread.run(Thread.java:1019) 
02-21 11:42:41.324: E/cache(2848): illegal expires: Sat, Jan 01 2000 01:01:01 GMT 

Répondre

7

Utilisez comme cette

WebView webview = new WebView(this); 
setContentView(webview); 
byte[] post = EncodingUtils.getBytes("postvariable=value&nextvar=value2", "BASE64"); 
webview.postUrl("http://www.geenie.nl/AnHeli/mobile/ranking/demo/index.php", post); 
+0

pour utiliser 'URLEncoder.encode (mot de passe," UTF-8 ")' lors de la génération de la chaîne de données post. –

1

Je ne sais pas si cela est où votre défaut, ou si cela entraînera une erreur, mais comme vous faites un POST, supprimez le "?" à la fin de votre variable URL_REGISTER.

private final String URL_REGISTER = "https://www.paypal.com/checkout?"; 

"?" est nécessaire uniquement lors d'une requête GET.

David

+1

J'ai enlevé le "?" . Après avoir appelé le message Http, la première URL a été chargée avec succès, redirigeant le message de la page "https://www.paypal.com/checkout" vers https://www.paypal.com/conformation. Lancement Échec de l'exception setFormData – jennifer