2011-07-31 43 views
0
package info.testing; 

import java.io.IOException; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.webkit.WebView; 
import android.widget.Toast; 

public class SoupActivity extends Activity { 

private static final String TAG = "SoupActivity"; 
private static final String DATA = null; 
private String data = null; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if(savedInstanceState != null) 
    { 
     data = savedInstanceState.getString(DATA); 
     showResults(); 
    } 
    else 
    { 
     parsePage(); 
    } 
} 

protected void parsePage(){ 
    Document doc = null; 
    try { 
     doc = Jsoup.connect("http://www.mydata.html").get(); 
     Toast.makeText(this, R.string.success, Toast.LENGTH_SHORT).show(); 
    } catch (IOException e) { 
     Toast.makeText(this, R.string.error, Toast.LENGTH_SHORT).show(); 
    } 

    Elements rows = doc.select("tr[class]"); 

    data = "<table>" + rows.toString() + "</table>"; 
    showResults(); 
} 

protected void showResults(){ 
    WebView web = (WebView)findViewById(R.id.web); 
    web.loadData(data, "text/html", "utf-8"); 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState){ 
    savedInstanceState.putString(DATA, data); 
    super.onSaveInstanceState(savedInstanceState); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState){ 
    if(savedInstanceState != null) 
    { 
     data = savedInstanceState.getString(DATA); 
    } 
    super.onRestoreInstanceState(savedInstanceState); 
} 
} 

的Flash/Flex開發者在這裏開始獲得在Android開發關閉,我必須承認,我喜歡它,到目前爲止,但很明顯,花費很長的時間來解決的事情,爲什麼會發生他們的方式。的Android - 應用力在沒有互聯網連接

所以我遇到的問題是我的應用程序崩潰沒有互聯網連接 - 應用程序(process.testing)意外停止。這隻發生在沒有互聯網連接的情況下,如果有的話可以完美地工作。我的代碼訪問Internet的唯一部分是在try catch塊中,任何人都可以看到我在做什麼錯誤,或者當沒有可用的Internet連接時如何處理錯誤?

回答

1

當你有沒有互聯網連接,doc可能是零,你會得到NullPointerException,因爲你不檢查這種情況:

Document doc = null; 
try { 
    // connect throws an exception, doc still null 
    doc = Jsoup.connect("http://www.mydata.html").get(); 
    Toast.makeText(this, R.string.success, Toast.LENGTH_SHORT).show(); 
} catch (IOException e) { 
    Toast.makeText(this, R.string.error, Toast.LENGTH_SHORT).show(); 
} 

// dereferencing null (doc) throws NullPointerException 
Elements rows = doc.select("tr[class]"); 
+0

是的,當然,有點小學生的錯誤,如果我更熟悉調試器,我會抓住那一個,謝謝。 – Neil

+0

那麼下一次呢... – MByD

7

您可以使用此功能,看是否有連接可用:

/** 
* Check the network state 
* @param context context of application 
* @return true if the phone is connected 
*/ 
public static boolean isConnected(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
     return true; 
    } 
    return false; 
} 
+0

感謝這個信息它將是非常有用的,我已經接受MByD的答案,因爲它直接關係到我的錯誤。 – Neil

+1

是的,但我的測試比MByD方法更具反應性 – Guillaume