जांचना जारी रखें, मैं अब कुछ दिनों के लिए इस पर काम कर रहा हूं। मैंने अभी एंड्रॉइड के साथ काम करना शुरू कर दिया। मेरे पास 2 भाग का सवाल है। मैं जांचना चाहता हूं कि इंटरनेट उपलब्ध है या नहीं। यदि यह अलर्ट नहीं देता है और वेब व्यू को लोड होने से रोकता है तो यह वेब व्यू लॉन्च करता है। मैंने कोशिश की है लेकिन अगर इंटरनेट कनेक्शन नहीं है तो यह बल बंद हो जाता है (उदाहरण के लिए विमान मोड)। मैं इसे संदेश देने और वेबव्यू लोड करना बंद करने के लिए कैसे प्राप्त करूं। कनेक्शन के निरंतर जांच करने का एक तरीका भी है ताकि वेबपृष्ठ 404 कनेक्शन खोने पर दिखाया न जाए?एंड्रॉइड - कोई इंटरनेट कनेक्शन नहीं है और
मेरा कोड यहां है।
public class MainActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
android.net.NetworkInfo wifi = cm
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
android.net.NetworkInfo datac = cm
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if ((wifi != null & datac != null)
&& (wifi.isConnected() | datac.isConnected())) {
setContentView(R.layout.activity_main);
}else{
//no connection
Toast toast = Toast.makeText(MainActivity.this, "No Internet Connection", Toast.LENGTH_LONG);
toast.show();
}
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(new MyWebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://mysite.com/?ma=1");
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("mysite.com")) {
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.logout:
finish();
return true;
}
return false;
}
}
संपादित करें: जोड़ा त्रुटियाँ विशिष्ट होना करने के लिए, मैं इन त्रुटियों को जब वापस दबाने के बाद यह कह कोई इंटरनेट कनेक्ट टोस्ट से पता चलता मिलता है। अगर मैं टोस्ट संदेश के बाद बैक बटन का उपयोग करता हूं और त्रुटियां नीचे होती हैं तो यह दुर्घटनाग्रस्त हो जाती है। यदि आपके आवेदन लगातार इंटरनेट कनेक्शन की जरूरत है,
....
if ((wifi != null & datac != null) && (wifi.isConnected() || datac.isConnected()))
{
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(new MyWebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://mysite.com/?ma=1");
}
else
{
//no connection
Toast toast = Toast.makeText(MainActivity.this, "No Internet Connection",Toast.LENGTH_LONG);
toast.show();
}
.....
अब:
04-07 14:40:38.664: E/AndroidRuntime(15173): FATAL EXCEPTION: main
04-07 14:40:38.664: E/AndroidRuntime(15173): java.lang.NullPointerException
04-07 14:40:38.664: E/AndroidRuntime(15173): at com.mysite.testapp.MainActivity.onKeyDown(MainActivity.java:67)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.view.KeyEvent.dispatch(KeyEvent.java:2705)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.app.Activity.dispatchKeyEvent(Activity.java:2401)
04-07 14:40:38.664: E/AndroidRuntime(15173): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2007)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3813)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3761)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2926)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.os.Handler.dispatchMessage(Handler.java:99)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.os.Looper.loop(Looper.java:137)
04-07 14:40:38.664: E/AndroidRuntime(15173): at android.app.ActivityThread.main(ActivityThread.java:4918)
04-07 14:40:38.664: E/AndroidRuntime(15173): at java.lang.reflect.Method.invokeNative(Native Method)
04-07 14:40:38.664: E/AndroidRuntime(15173): at java.lang.reflect.Method.invoke(Method.java:511)
04-07 14:40:38.664: E/AndroidRuntime(15173): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
04-07 14:40:38.664: E/AndroidRuntime(15173): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
04-07 14:40:38.664: E/AndroidRuntime(15173): at dalvik.system.NativeStart.main(Native Method)
आप नल पॉइंटर एक्सेप्शन हो रही है coz अपने वेबव्यू रिक्त है में इन अनुमतियों जोड़ें। आप केवल तभी सेट करते हैं जब इंटरनेट उपलब्ध हो। जब इंटरनेट उपलब्ध नहीं है तो आप टोस्ट प्रदर्शित करते हैं। लेकिन आप दृश्य को सेट नहीं कर रहे हैं। – Raghunandan