Internet 连接导致 Android 应用程序出现空指针异常
Internet connectivity causes Null Pointer Exception in Android application
我正在设计一个具有互联网连接的登录屏幕,但是当我 运行 该代码时它抛出连接。
The connectivity code used in broadcast receiver
public class ConnectivityReceiver extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected(){
ConnectivityManager
cm = (ConnectivityManager) SpsApplication.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
}
At getApplicationContext()
throws error Calling checkConnection()
method in onCreate method
public class LoginActivity 扩展 AppCompatActivity 实现 ConnectivityReceiverListener{
private EditText mEditEmail;
private EditText mEditPassword;
private Button mButtonLoginSPS;
private LinearLayout linearLayoutLogin;
String emailSPS, passwordSPS;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//Check Internet Connectivity while loading login screen
linearLayoutLogin = (LinearLayout) findViewById(R.id.main_login);
mEditEmail = (EditText) findViewById(R.id.emailEditEmail);
emailSPS = mEditEmail.getText().toString();
mButtonLoginSPS = (Button) findViewById(R.id.buttonLoginSPS);
mButtonLoginSPS.setEnabled(false);
mEditEmail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (emailSPS.matches(Constant.PATTERN_EMAIL) && s.length() > 0) {
//mEditEmail.setError("Invalid Email");
Snackbar.make(linearLayoutLogin, R.string.invalid_email, Snackbar.LENGTH_SHORT).show();
} else {
mEditEmail.setError("Valid Email");
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
mEditPassword = (EditText) findViewById(R.id.emailEditPassword);
mEditPassword.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
callWebserviceEnabled();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private void checkConnection() {
boolean isConnected = ConnectivityReceiver.isConnected();
showSnack(isConnected);
}
private void showSnack(boolean isConnected) {
String message;
int color;
if (isConnected) {
message = "Good! You are connected to network";
color = Color.WHITE;
} else {
message = "Oh ! You are not connected. Please check connectivity";
color = Color.RED;
}
Snackbar snackbar = Snackbar.make(linearLayoutLogin, message, Snackbar.LENGTH_SHORT);
View sbView = snackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(color);
snackbar.show();
}
private void callWebserviceEnabled() {
passwordSPS = mEditPassword.getText().toString();
mButtonLoginSPS.setEnabled(true);
mButtonLoginSPS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Check Internet Connectivity while loading login screen
checkConnection();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
@Override
public void onNetworkConnectionChanged(boolean isConnected) {
showSnack(isConnected);
}
}
SPS应用程序class
public class SpsApplication extends Application {
private static SpsApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized SpsApplication getInstance() {
return mInstance;
}
public void setConnectivityListener(ConnectivityReceiverListener listener) {
ConnectivityReceiver.connectivityReceiverListener = listener;
}
}
Here are detailed log of error receive while running application and pressing button
06-22 14:04:04.443 21986-21986/labs.spoke.com.spokeadmin E/AndroidRuntime: FATAL EXCEPTION: main
Process: labs.spoke.com.spokeadmin, PID: 21986
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.ContextWrapper.getApplicationContext()' on a null object reference
at labs.spoke.com.spokeadmin.testify.ConnectivityReceiver.isConnected(ConnectivityReceiver.java:32)
at labs.spoke.com.spokeadmin.acts.LoginActivity.checkConnection(LoginActivity.java:100)
at labs.spoke.com.spokeadmin.acts.LoginActivity.access0(LoginActivity.java:28)
at labs.spoke.com.spokeadmin.acts.LoginActivity.onClick(LoginActivity.java:131)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
`
If SpsApplication.getInstance() return 应用程序对象则无需调用 getApplicationContext() 方法。删除此方法。
ConnectivityManager cm = (ConnectivityManager) SpsApplication.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
看起来 SpsApplication
给出了空指针
您应该将其添加到应用程序标签中的清单中
name=".SpsApplication"
Try this code hope this will help:
正在申请 class
public static ApplicationClassName appInstance = null;
@Override
public void onCreate() {
super.onCreate();
appInstance = this;
并使用这个 appInstance
public static boolean isConnectedToInternet() {
ConnectivityManager connectivity = (ConnectivityManager) ApplicationClassName.appInstance.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null)
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
Check if internet connectivity is available or not.
if(isConnectedToInternet()) {
// network available
} else{
// offline
}
NullPointerException is thrown when an application attempts to use an
object reference that has the null value .
你应该通过 Context
Interface to global information about an application environment. This
is an abstract class whose implementation is provided by the Android
system. It allows access to application-specific resources and
classes, as well as up-calls for application-level operations such as
launching activities, broadcasting and receiving intents, etc.
public static boolean isConnected(Context ctxOBJ)
{
ConnectivityManager cm = (ConnectivityManager) ctxOBJ.getSystemService(Context.CONNECTIVITY_SERVICE);
.......//Add your code........
}
按照以下代码更改您的方法。
public static boolean isConnected(Context context){
ConnectivityManager
cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
提供您正在调用此 isConnected() 方法的上下文。希望对您有所帮助。
这些是我对运行我的代码
所做的一些修改
public static boolean isConnected(Context context) {
ConnectivityManager
cm = (ConnectivityManager) context.getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
通过传递上下文引用
登录activity的另一个变化
private void checkConnection() {
boolean isConnected = ConnectivityReceiver.isConnected(this);
showSnack(isConnected);
}
我正在设计一个具有互联网连接的登录屏幕,但是当我 运行 该代码时它抛出连接。
The connectivity code used in broadcast receiver
public class ConnectivityReceiver extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected(){
ConnectivityManager
cm = (ConnectivityManager) SpsApplication.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
}
At
getApplicationContext()
throws error CallingcheckConnection()
method in onCreate method
public class LoginActivity 扩展 AppCompatActivity 实现 ConnectivityReceiverListener{
private EditText mEditEmail;
private EditText mEditPassword;
private Button mButtonLoginSPS;
private LinearLayout linearLayoutLogin;
String emailSPS, passwordSPS;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//Check Internet Connectivity while loading login screen
linearLayoutLogin = (LinearLayout) findViewById(R.id.main_login);
mEditEmail = (EditText) findViewById(R.id.emailEditEmail);
emailSPS = mEditEmail.getText().toString();
mButtonLoginSPS = (Button) findViewById(R.id.buttonLoginSPS);
mButtonLoginSPS.setEnabled(false);
mEditEmail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (emailSPS.matches(Constant.PATTERN_EMAIL) && s.length() > 0) {
//mEditEmail.setError("Invalid Email");
Snackbar.make(linearLayoutLogin, R.string.invalid_email, Snackbar.LENGTH_SHORT).show();
} else {
mEditEmail.setError("Valid Email");
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
mEditPassword = (EditText) findViewById(R.id.emailEditPassword);
mEditPassword.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
callWebserviceEnabled();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private void checkConnection() {
boolean isConnected = ConnectivityReceiver.isConnected();
showSnack(isConnected);
}
private void showSnack(boolean isConnected) {
String message;
int color;
if (isConnected) {
message = "Good! You are connected to network";
color = Color.WHITE;
} else {
message = "Oh ! You are not connected. Please check connectivity";
color = Color.RED;
}
Snackbar snackbar = Snackbar.make(linearLayoutLogin, message, Snackbar.LENGTH_SHORT);
View sbView = snackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(color);
snackbar.show();
}
private void callWebserviceEnabled() {
passwordSPS = mEditPassword.getText().toString();
mButtonLoginSPS.setEnabled(true);
mButtonLoginSPS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Check Internet Connectivity while loading login screen
checkConnection();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
@Override
public void onNetworkConnectionChanged(boolean isConnected) {
showSnack(isConnected);
}
}
SPS应用程序class
public class SpsApplication extends Application {
private static SpsApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized SpsApplication getInstance() {
return mInstance;
}
public void setConnectivityListener(ConnectivityReceiverListener listener) {
ConnectivityReceiver.connectivityReceiverListener = listener;
}
}
Here are detailed log of error receive while running application and pressing button
06-22 14:04:04.443 21986-21986/labs.spoke.com.spokeadmin E/AndroidRuntime: FATAL EXCEPTION: main
Process: labs.spoke.com.spokeadmin, PID: 21986
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.ContextWrapper.getApplicationContext()' on a null object reference
at labs.spoke.com.spokeadmin.testify.ConnectivityReceiver.isConnected(ConnectivityReceiver.java:32)
at labs.spoke.com.spokeadmin.acts.LoginActivity.checkConnection(LoginActivity.java:100)
at labs.spoke.com.spokeadmin.acts.LoginActivity.access0(LoginActivity.java:28)
at labs.spoke.com.spokeadmin.acts.LoginActivity.onClick(LoginActivity.java:131)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
`
If SpsApplication.getInstance() return 应用程序对象则无需调用 getApplicationContext() 方法。删除此方法。
ConnectivityManager cm = (ConnectivityManager) SpsApplication.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
看起来 SpsApplication
给出了空指针
您应该将其添加到应用程序标签中的清单中
name=".SpsApplication"
Try this code hope this will help:
正在申请 class
public static ApplicationClassName appInstance = null;
@Override
public void onCreate() {
super.onCreate();
appInstance = this;
并使用这个 appInstance
public static boolean isConnectedToInternet() {
ConnectivityManager connectivity = (ConnectivityManager) ApplicationClassName.appInstance.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null)
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
Check if internet connectivity is available or not.
if(isConnectedToInternet()) {
// network available
} else{
// offline
}
NullPointerException is thrown when an application attempts to use an object reference that has the null value .
你应该通过 Context
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.
public static boolean isConnected(Context ctxOBJ)
{
ConnectivityManager cm = (ConnectivityManager) ctxOBJ.getSystemService(Context.CONNECTIVITY_SERVICE);
.......//Add your code........
}
按照以下代码更改您的方法。
public static boolean isConnected(Context context){
ConnectivityManager
cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
提供您正在调用此 isConnected() 方法的上下文。希望对您有所帮助。
这些是我对运行我的代码
所做的一些修改 public static boolean isConnected(Context context) {
ConnectivityManager
cm = (ConnectivityManager) context.getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
通过传递上下文引用
登录activity的另一个变化private void checkConnection() {
boolean isConnected = ConnectivityReceiver.isConnected(this);
showSnack(isConnected);
}