2011-07-31 19 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の開発に取得し始めていない時にアプリの力が閉じ、私は今のところそれを愛するが、明らかに物事が起こる理由を動作するように長い時間を取っています認めなければなりません彼らのやり方。アンドロイド - インターネットに接続

だから問題は私のアプリケーションがインターネット接続なしでクラッシュすることです - アプリケーション(process.testing)が予期せず停止しました。これは、インターネット接続がなくても完璧に動作する場合にのみ発生します。インターネットにアクセスする私のコードの唯一の部分はtry catchブロックにあります。誰かが間違ってやっていることを見ることができますか?

答えて

1

あなたがインターネットに接続していなく、docはおそらくnullで、あなたがこのケースをチェックしていないので、あなたが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

関連する問題