2011-04-24 178 views
1

我正在訪問互聯網以獲取信息。當我訪問互聯網時,該應用程序正在關閉。如果該應用程序被刪除並重新安裝,它不會在我訪問互聯網時強制關閉。第一次安裝該應用程序時會發生這種情況。請幫我弄清楚這一點。從android市場首次安裝android應用程序的問題

這是堆棧跟蹤 -

java.lang.RuntimeException: Unable to start activity ComponentInfo{ListOfDealSites}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4627) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at java.io.DataInputStream.readLine(DataInputStream.java:309) 
at ListOfDealSites.onCreate(ListOfDealSites.java:53) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
... 11 more 

它還說源方法 - DataInputStream.readLine()

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.dealsites); 

    InputStream in = null; 
    try { 
     // Connect to the server to get the list of deal sites 
     in = OpenHttpConnection("Link to deal server"); 
     } 
    catch (IOException e1) { 

     // TODO Auto-generated catch block   
     e1.printStackTrace(); 
    } 

    try { 

       DataInputStream dataIO = new DataInputStream(in); 
     String strLine = null; 
     int i = 0; 

     while((strLine = dataIO.readLine())!= null) // Line 53------ 
     { 
      count = i; 
      NEWDEALSITES[i++] = strLine; 

     } 

     dataIO.close(); 
     in.close(); 
    } 
    catch (IOException e){ 

    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

    count_deals = count/2; 
    newdeals = new String[count_deals+1]; 
    newsites = new String[count_deals+1]; 
    int j, k; 
    for(j = 0, k = 0; k < count; j++) 
    { 
     newdeals[j] = NEWDEALSITES[k++]; 
     newsites[j] = NEWDEALSITES[k++]; 

    } 

    listOfDealSites = (ListView)findViewById(R.id.ListView01); 
    listOfDealSites.setAdapter(new ArrayAdapter<String>(this,R.layout.row,newdeals)); 



} 

//Function to connect to the server. 
private InputStream OpenHttpConnection(String urlString) 
throws IOException 
{ 
    InputStream in = null; 
    int response = -1; 

    URL url = new URL(urlString); 
    URLConnection conn = url.openConnection(); 

    if (!(conn instanceof HttpURLConnection))      
     throw new IOException("Not an HTTP connection"); 

    try{ 
     HttpURLConnection httpConn = (HttpURLConnection) conn; 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setInstanceFollowRedirects(true); 
     httpConn.setRequestMethod("GET"); 
     httpConn.connect(); 

     response = httpConn.getResponseCode();     
     if (response == HttpURLConnection.HTTP_OK) { 
      in = httpConn.getInputStream();         
     }      
    } 
    catch (Exception ex) 
    { 
     throw new IOException("Error connecting");    
    } 
    return in;  
} 

}

+1

@ user588132:發佈ListOfDealSites.onCreate()的代碼並告訴我們哪一行是第53行。 – Squonk 2011-04-24 22:54:58

+0

我編輯了我的問題... – user588132 2011-04-24 23:11:33

+0

變量'in'可能爲空。您發現異常,但繼續使用var, – Blundell 2011-04-24 23:32:07

回答

0

問題是由於沒有互聯網連接造成的。我發現了這個異常,並且發出了一條消息來檢查連接。

謝謝大家的幫助。

1

出於某種原因,OpenHttpConnection被返回null這基本上意味着你在這裏沒有得到好的迴應...

response = httpConn.getResponseCode();     
if (response == HttpURLConnection.HTTP_OK) { 
    in = httpConn.getInputStream();         
} 

這意味着dataIO將是無效的,當你嘗試讀取線53

從DataInputStream類的構造函數的文檔資料...

公共DataInputStream類(InputStream的 中)由於: API等級1

構造上的InputStream新 DataInputStream所英寸

全部讀取,然後通過過濾 這個流。請注意,由 讀取的數據不是可讀的 格式,最有可能是由 創建的DataOutputStream。

警告:通過 空源創建無效的 DataInputStream。 上的所有操作都會失敗。

不知道會是什麼導致這或如何解決它,但你一定要嘗試使用「中」的InputStream創建您的DataInputStream所前檢查從OpenHttpConnection返回一個空的結果。

+0

爲什麼僅在第一次發生?我如何優雅地關閉應用程序並要求用戶再試一次? – user588132 2011-04-24 23:44:36

+0

@ user588132:我不知道 - 我也很困惑。所以你說的是一個完整的卸載/重新安裝修復的東西?在附註中,嘗試記錄OpenHttpConnection方法中的「響應」。知道它是不是HTTP.OK,它可能很有趣。 – Squonk 2011-04-24 23:51:20

+0

是的,這是...我不知道如何重新創建錯誤。它是否與我需要添加的一些設置有關。 – user588132 2011-04-25 00:04:34

相關問題