- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我通过使用 PHP 脚本查询数据库。目前,它会在应用程序出现在屏幕上时立即获取信息。但是,如果您没有互联网连接,它会返回 NullPointerException,因为它没有获取任何数据。从那以后,我用 ConnectivityManager 和 NetworkInfo 更新了我的代码,如果用户没有连接到他们的网络或 WiFi,它会显示提示框。问题是它跳过了这一点,只是像往常一样执行其余代码。
public class Shc_BalloonSat_Activity extends Activity
{
int historyCountFromUser;
httpAPI api;
mapAPI map;
DecimalFormat df = new DecimalFormat("##.#####");
DecimalFormat decimalf = new DecimalFormat("##.######");
SharedPreferences pref;
Editor prefEditor;
String lastpacketsPHP;
// User to determine how many packet the user would like to see.
int userDefinedCount = 5;
/*
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String returned = "";
lastpacketsPHP = "";
pref = getSharedPreferences("shared_prefs", 0);
prefEditor = pref.edit();
prefEditor.putString(lastpacketsPHP, "/* PHP file url goes here */");
prefEditor.commit();
if(!isNetworkConnected(this))
{
Toast.makeText(this, "Please connect to the internet to access the full functionality of this app.", Toast.LENGTH_LONG).show();
}
else
{
api = new httpAPI(this);
map = new mapAPI(this);
try
{
returned = api.getData();
}
catch (Exception e)
{
e.printStackTrace();
}
TextView infoTV = (TextView)this.findViewById(R.id.info);
infoTV.setText(returned);
assignInfoToInfoTextView();
assignInfoToHistoryTextView();
}
}
public boolean isNetworkConnected(Context context)
{
ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isAvailable() && connectionManager.getActiveNetworkInfo().isConnected())
{
return true;
}
else
{
return false;
}
}
知道我做错了什么吗?
更新(LogCat 错误信息):
02-19 13:55:19.450: E/log_tag(443): Error in HTTP connection: java.net.UnknownHostException: Host is unresolved: space.uah.edu:80
02-19 13:55:19.450: E/log_tag(443): Error converting result: java.lang.NullPointerException
02-19 13:55:19.450: E/log_tag(443): Error in HTTP connection: java.net.UnknownHostException: Host is unresolved: space.uah.edu:80
02-19 13:55:19.450: E/log_tag(443): Error converting result: java.lang.NullPointerException
02-19 13:55:19.450: E/AndroidRuntime(443): Uncaught handler: thread main exiting due to uncaught exception
02-19 13:55:19.473: E/AndroidRuntime(443): java.lang.RuntimeException: Unable to start activity ComponentInfo{shc_BalloonSat.namespace/shc_BalloonSat.namespace.Shc_BalloonSat_Activity}: java.lang.NullPointerException: println needs a message
02-19 13:55:19.473: E/AndroidRuntime(443): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.os.Handler.dispatchMessage(Handler.java:99)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.os.Looper.loop(Looper.java:123)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.app.ActivityThread.main(ActivityThread.java:4363)
02-19 13:55:19.473: E/AndroidRuntime(443): at java.lang.reflect.Method.invokeNative(Native Method)
02-19 13:55:19.473: E/AndroidRuntime(443): at java.lang.reflect.Method.invoke(Method.java:521)
02-19 13:55:19.473: E/AndroidRuntime(443): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-19 13:55:19.473: E/AndroidRuntime(443): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-19 13:55:19.473: E/AndroidRuntime(443): at dalvik.system.NativeStart.main(Native Method)
02-19 13:55:19.473: E/AndroidRuntime(443): Caused by: java.lang.NullPointerException: println needs a message
02-19 13:55:19.473: E/AndroidRuntime(443): at android.util.Log.println(Native Method)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.util.Log.e(Log.java:208)
02-19 13:55:19.473: E/AndroidRuntime(443): at shc_BalloonSat.namespace.Shc_BalloonSat_Activity.assignInfoToInfoTextView(Shc_BalloonSat_Activity.java:173)
02-19 13:55:19.473: E/AndroidRuntime(443): at shc_BalloonSat.namespace.Shc_BalloonSat_Activity.onCreate(Shc_BalloonSat_Activity.java:75)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-19 13:55:19.473: E/AndroidRuntime(443): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
02-19 13:55 :19.473: E/AndroidRuntime(443): ... 11 more
最佳答案
假设您的连接检查逻辑工作正常,将其设为 if/else。如果未连接显示 toast ,否则继续逻辑。
if(!isNetworkConnected(this)) {
Toast.makeText(this, "Please connect to the internet to access the full functionality of this app.", Toast.LENGTH_LONG).show();
}
else
{
TextView infoTV = (TextView)this.findViewById(R.id.info);
infoTV.setText(returned);
assignInfoToInfoTextView();
assignInfoToHistoryTextView();
}
关于android - 使用 ConnectivityManager 和 NetworkInfo 避免 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351949/
大家好,我需要验证我的设备当前是否连接到互联网,所以我编写了这个类,它使用 ConnectivityManager 来检查: public boolean checkInternetConnectio
在此处显示的代码中出现空指针问题。通常,空指针是一种简单易行的修复方法,但在这种情况下,我完全迷失了原因。 空指针在这一行: dataConnectionStatus = connManager.ge
我是 Android 的新手,当我提供以下代码 fragment 时,我的 Android 应用程序崩溃了。 ConnectivityManager manager = (ConnectivityMa
我正在使用 ConnectivityManager.NetworkCallback 在互联网可用或丢失时获取回调。以下是确定我需要收听哪种传输类型的配置。 manager.registerNetwor
我注册了一个广播来获取ConnectivityManager.CONNECTIVITY_ACTION,代码是: registerReceiver(mNetwrokBroadcastReceiver,
我正在询问来自 android 设备的连接类型,但我不知道什么类型是 wimax。 ConnectivityManager conMgr = (ConnectivityManager) context
Intent intent = new Intent().setAction(ConnectivityManager.CONNECTIVITY_ACTION); sendBroadcast(inten
我总是得到一个空指针异常,即使我在这段代码上连接到 wifi 也是如此: ConnectivityManager connectivityManager = (ConnectivityM
在Android N中,官网提到“Apps targeting Android N do not receive CONNECTIVITY_ACTION broadcasts”。并且还提到 JobSc
所以,我有这个方法可以让我知道用户是否有 Activity 的互联网连接。它运作良好。但是,leak canary 已识别出与 connectivityManager 相关的内存泄漏。据我所知,我目前
我有想要读取网络连接状态的简单代码。我已经向 AndroidManifest.xml 添加了权限: 我尝试访问网络状态的代码: ConnectivityManager conmgr = (C
我偶尔会在连接管理器中看到空指针异常。从 Intent 服务中,我通过 isOnWIFI(this) 检查网络状态。异常发生在 cm.getActiveNetworkInfo() 行。这很奇怪,因为我
我们使用 Android ConnectivityManager 来监听我们应用程序内部的互联网连接变化,如下所示。 class MainActivity : AppCompatActivity()
我正在注册接收器以捕获 ConnectivityManager.CONNECTIVITY_ACTION 代码,即我没有在应用程序 list 中注册它。一切正常,但我注意到我在注册接收器后立即自动收到广
我正在创建一个 BroadcastReceiver 来监听 Wi-Fi 连接变化: registerReceiver(new BroadcastReceiver() { @Override
需要知道getActiveNetwork返回什么样的值。我使用的代码是: ConnectivityManager connectivityManager = (ConnectivityMan
在Android N中,官网上提到“针对Android N的应用程序不接收CONNECTIVITY_ACTION广播”。并且还提到可以使用 JobScheduler 作为替代方案。但是 JobSche
我有一个返回设备连接状态的功能,它一直工作正常,除非设备连接到 VPN,当网络不可用时它会给出误报 fun isConnected(): Boolean { var resul
我是 Android 世界的新手(作为用户,也是作为开发人员),并且我的 Android 应用程序在执行 myWebView.loadUrl("https://www.google.com") 时崩溃
有人看过 jsharkey 的 battery life google io presentation ? 如何切换模拟器中 ConnectivityManager.getBackgroundData
我是一名优秀的程序员,十分优秀!