2014-02-27 29 views
0

我將嘗試使用下面的代碼編碼一定網址:NullPointerException異常而編碼的android的URL

myWebView = (WebView)findViewById(R.id.webView1); 

    Login myLogin = new Login(); 
    url = myLogin.AuthUrl; 
    try 
    { 

     String encodedUrl = URLEncoder.encode(url, "UTF-8"); 
    } 
    catch (UnsupportedEncodingException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    myWebView.loadUrl(url); 
    myWebView.setWebViewClient(new MyWebViewClient()); 

,但我得到了以下錯誤: -

02-27 15:21:57.054: E/AndroidRuntime(1586): FATAL EXCEPTION: main 
    02-27 15:21:57.054: E/AndroidRuntime(1586): Caused by: java.lang.NullPointerException 
    02-27 15:21:57.054: E/AndroidRuntime(1586): at libcore.net.UriCodec.encode(UriCodec.java:132) 
    02-27 15:21:57.054: E/AndroidRuntime(1586): at java.net.URLEncoder.encode(URLEncoder.java:57) 
    02-27 15:21:57.054: E/AndroidRuntime(1586): at com.abcdef.abcd.Details.onCreate(Details.java:42) 

什麼可能會錯誤? 感謝您的幫助。

+0

什麼寫在第42行? –

+0

使用此字符串查詢= URLEncoder.encode(url,「utf-8」);''我認爲你已經設置大寫'UTF-8'可能是這是造成問題。我不確定它是否正確,但只是試一試。 – InnocentKiller

+0

@SagarShah它與我在問題中提到的相同。即'字符串編碼= UrlEncoder.encode(url,「UTF-8」);' – user3354605

回答

0

Login()裏面有什麼?

Login myLogin = new Login(); 

請登錄並檢查myLogin對象是否有url。

字符串編碼= UrlEncoder.encode(url,「UTF-8」);

應該是:

String encoded = URLEncoder.encode(url,"UTF-8"); 

如果你已經宣佈它作爲一個變量,那麼它是正確的初始化。

請檢查您是否獲得與URLEncoder的同樣的錯誤(直接使用的時候,沒有變量)

+0

如果編碼錯誤,它將返回一個UnsupportedEncodingException,因爲您可以在文檔中閱讀,而不是NullPointerException – ReeCube

+0

@ReeCube大寫 - 「URLE ..」 - 它不會給編譯時錯誤嗎? – user2450263

+0

@ user2450263:**「它不會給編譯時錯誤嗎?」** - 如果OP已經定義了一個名爲UrlEncoder的字段,但不會顯示像這樣的堆棧跟蹤。 – Squonk

0

使用盡量趕上週圍像這樣:

 try 
     { 
      encoded = URLEncoder.encode(url,"UTF-8"); 
      txt1.setText(encoded); 
     } 
     catch (UnsupportedEncodingException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
1

這是的編碼方法的源libcore.net.UriCodec ... 132

public final String encode(String s, Charset charset) { 
    // Guess a bit larger for encoded form 
    StringBuilder builder = new StringBuilder(s.length() + 16); 
    appendEncoded(builder, s, charset, false); 
    return builder.toString(); 
} 

線顯示在堆棧跟蹤...

02-27 15:21:57.054: E/AndroidRuntime(1586):  at libcore.net.UriCodec.encode(UriCodec.java:132) 

...這是行...

StringBuilder builder = new StringBuilder(s.length() + 16); 

它可以拋出一個NPE的唯一方法是在s.length。換句話說,你傳遞的是一個空字符串的URL。

編輯:看看你發佈的額外代碼,它似乎創建了Login類的新實例,並未初始化AuthUrl字段,因此url爲空。

Login myLogin = new Login(); 
url = myLogin.AuthUrl; 
相關問題