从非静态的上下文调用静态方法
我想从我的广播接收器中的onReceive方法调用SCS类中的几个方法,但它给了我无处不在的错误“无法对非静态方法进行静态引用”静态方法CheckConnection()从类型SCS”从非静态的上下文调用静态方法
SCSReceiver.class
public class SCSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SCS.mehtodName(context);
// ... do what you need to do here...
}
SCS.class
public class SCS extends Activity {
private Handler handler;
private Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connection_stablizer);
}
public static void mehtodName(Context context) {
// TODO Auto-generated method stub
CheckConnection();
}
private void CheckConnection() {
ConnectivityManager cn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nf = cn.getActiveNetworkInfo();
if (nf != null && nf.isConnected() == true) {
//CheckAccess();
Toast.makeText(this,
"Network Available! now checking Inernet access..",
Toast.LENGTH_SHORT).show();
} else {
// Toast.makeText(this, "Network Not Available", Toast.LENGTH_SHORT)
// .show();
}
}
的manifest.xml
<activity
android:name="com.xyz.netspeedmaster.SCS"
android:label="@string/title_activity_connection_stablizer" >
</activity>
<receiver android:name="com.xyz.abc.SCSReceiver" >
</receiver>
充分利用SCSReceiver
类的内部类的SCS
类:
public class SCS extends Activity {
private Handler handler;
private Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connection_stablizer);
}
public static void methodName(Context context) {
// TODO Auto-generated method stub
CheckConnection();
}
private void CheckConnection() {
ConnectivityManager cn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nf = cn.getActiveNetworkInfo();
if (nf != null && nf.isConnected() == true) {
CheckAccess();
Toast.makeText(this,
"Network Available! now checking Inernet access..",
Toast.LENGTH_SHORT).show();
} else {
// Toast.makeText(this, "Network Not Available", Toast.LENGTH_SHORT)
// .show();
}
}
class SCSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
methodName(context);
// ... do what you need to do here...
}
}
无需SCS.methodName
,只需直接调用该方法。
您是否尝试过我的解决方案? –
啊,你应该删除它。我会更新答案。 –
解决方案是否适合您? –
如果您不想调用基于System Receivers的BroadcastReceiver,那么您可以尝试使用Dynamic BroadcastReceiver,通过它可以调用Activity的方法。
public class SCS extends Activity {
private Handler handler;
private Runnable runnable;
private IntentFilter filter;
private BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connection_stablizer);
filter=new IntentFilter("com.your_package.ANY_TEXT_STRING");
receiver=new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
mehtodName(context); //Invoke your methods from here
}
};
registerReceiver(filter,receiver);
//Place the below two lines where you want to trigger BroadcastReceiver
Intent intent=new Intent("com.your_package.ANY_TEXT_STRING");
sendBroadcast(intent);
}
public static void mehtodName(Context context) {
// TODO Auto-generated method stub
CheckConnection();
}
private void CheckConnection() {
ConnectivityManager cn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nf = cn.getActiveNetworkInfo();
if (nf != null && nf.isConnected() == true) {
//CheckAccess();
Toast.makeText(this,
"Network Available! now checking Inernet access..",
Toast.LENGTH_SHORT).show();
} else {
// Toast.makeText(this, "Network Not Available", Toast.LENGTH_SHORT)
// .show();
}
}
再次看看错误消息。这不是它在你的头衔中所说的。 – EJP