尝试访问无线时,Android应用程序出错
我正在编写一个Android应用程序,我想在调用浏览器显示流之前确保无线连接,但是当点击按钮表示应用程序已停止运行时,它就会关闭。我已经在android清单文件中设置了权限。这是我的密码。在另一个叫做网络的课程中,我做了这个尝试访问无线时,Android应用程序出错,android,wireless,android-wifi,android-networking,Android,Wireless,Android Wifi,Android Networking,我正在编写一个Android应用程序,我想在调用浏览器显示流之前确保无线连接,但是当点击按钮表示应用程序已停止运行时,它就会关闭。我已经在android清单文件中设置了权限。这是我的密码。在另一个叫做网络的课程中,我做了这个 public class Networking extends Main { public boolean isWirelessConnected() { cm = (ConnectivityManager) getSystemServi
public class Networking extends Main {
public boolean isWirelessConnected()
{
cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mwifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(mwifi == null)
return false;
else
return true;
}
public void messageDialog()
{
AlertDialog.Builder alrtBuild = new AlertDialog.Builder(this);
alrtBuild
.setTitle("Wireless")
.setMessage("You are not Connected would you like to Connect to wireless?")
.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
WifiManager wifiManger = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiManger.setWifiEnabled(true);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = alrtBuild.create();
alert.show();
}
}
在我的主课上
Networking netwrk = new Networking();
if(netwrk.wireless().isConnected())
{
Intent brwoserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.own3d.tv/HotshotGG"));
startActivity(brwoserIntent);
}
下面是当我按下按钮时程序抛出的错误
12-08 19:51:16.904: E/AndroidRuntime(1549): FATAL EXCEPTION: main
12-08 19:51:16.904: E/AndroidRuntime(1549): java.lang.IllegalStateException: Could not execute method of the activity
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.view.View$1.onClick(View.java:3597)
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.view.View.performClick(View.java:4202)
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.view.View$PerformClick.run(View.java:17340)
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.os.Handler.handleCallback(Handler.java:725)
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.os.Handler.dispatchMessage(Handler.java:92)
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.os.Looper.loop(Looper.java:137)
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-08 19:51:16.904: E/AndroidRuntime(1549): at java.lang.reflect.Method.invokeNative(Native Method)
12-08 19:51:16.904: E/AndroidRuntime(1549): at java.lang.reflect.Method.invoke(Method.java:511)
12-08 19:51:16.904: E/AndroidRuntime(1549): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-08 19:51:16.904: E/AndroidRuntime(1549): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-08 19:51:16.904: E/AndroidRuntime(1549): at dalvik.system.NativeStart.main(Native Method)
12-08 19:51:16.904: E/AndroidRuntime(1549): Caused by: java.lang.reflect.InvocationTargetException
12-08 19:51:16.904: E/AndroidRuntime(1549): at java.lang.reflect.Method.invokeNative(Native Method)
12-08 19:51:16.904: E/AndroidRuntime(1549): at java.lang.reflect.Method.invoke(Method.java:511)
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.view.View$1.onClick(View.java:3592)
12-08 19:51:16.904: E/AndroidRuntime(1549): ... 11 more
12-08 19:51:16.904: E/AndroidRuntime(1549): Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
12-08 19:51:16.904: E/AndroidRuntime(1549): at android.app.Activity.getSystemService(Activity.java:4463)
12-08 19:51:16.904: E/AndroidRuntime(1549): at nc.prog1415.Networking.isWirelessConnected(Networking.java:14)
12-08 19:51:16.904: E/AndroidRuntime(1549): at nc.prog1415.Main.hotshotBtns(Main.java:109)
12-08 19:51:16.904: E/AndroidRuntime(1549): ... 14 more
最有可能的是
network.wireless()
返回null并导致NullPointerException
我将您的wireless()
方法更改为isWirelessConnected()
,如下所示
public boolean isWirelessConnected() {
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mwifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if ( mwifi == null )
return false;
else
return mwifi.isConnected();
}
然后在主课堂上,简单地做
Networking netwrk = new Networking();
if( netwrk.isWirelessConnected() ) {
Intent brwoserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.own3d.tv/HotshotGG"));
startActivity(brwoserIntent);
}
从LogCat:
系统服务不适用于onCreate()之前的活动
此错误是不言自明的,因此请将代码更改为:
ConnectivityManager cm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
...
}
添加
你的人际网络扩展了主要功能,我认为这是一项活动。既然你不想在你所做的事情上有一个完整的活动,你应该采取不同的策略。您应该在构造函数中传递一个上下文:
public class Networking {
Context context;
public Networking(Context con) {
context = con;
}
public boolean isWirelessConnected()
{
cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mwifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(mwifi == null)
return false;
else
return mwifi.isConnectedOrConnecting();
}
// etc
}
请注意,我切换到了context.getSystemService()
,在创建对话框时也需要这样做
现在更改使用此方法的方式:
Networking netwrk = new Networking(this);
if(netwrk.isWirelessConnected())
发布日志猫错误。我猜当设备没有WiFi连接时,network.wireless()
是空的,你应该对此进行检查。我编辑了我的问题,其中有错误,这并不能解决程序完全停止的问题。当logcat关闭时,您需要发布带有错误的logcat输出。因此,在Networking类中,我应该重写主类使用的onCreate?或者我应该彻底取消网络课程,主要是这样做吗?网络课程扩展了什么?发布你的一些网络课程。我已经用我的整个网络课程编辑了回复,请注意,在我的主类中,我有几个oncreate之外的方法,包括为该功能调用networking类的方法。感谢我的朋友,上下文修复修复了我的问题。只是出于好奇,如果我将消息对话框更改为contex.getSystemService,该方法是否修复了我的问题?