Android 正在尝试将internet访问检查结果发送到活动

Android 正在尝试将internet访问检查结果发送到活动,android,android-asynctask,Android,Android Asynctask,我有一个使用异步任务检查internet访问的非活动。顺便说一下,internet访问检查代码在活动中正常工作。现在,当我将代码添加到一个非活动类中时,我希望将响应保存到一个字符串中,并使用“startActivityForResult”发送到MainActivity。我添加了一个Toast来检查值是否传递给MainActivity,但是Toast显示为空。因此,要么响应没有保存字符串,要么响应没有发送到MainActivity。我还发布了日志cat,因为当我在MainActivity中单击按钮

我有一个使用异步任务检查internet访问的非活动。顺便说一下,internet访问检查代码在活动中正常工作。现在,当我将代码添加到一个非活动类中时,我希望将响应保存到一个字符串中,并使用“startActivityForResult”发送到MainActivity。我添加了一个Toast来检查值是否传递给MainActivity,但是Toast显示为空。因此,要么响应没有保存字符串,要么响应没有发送到MainActivity。我还发布了日志cat,因为当我在MainActivity中单击按钮时,由于值为null,应用程序崩溃

LogCat
09-26 13:31:26.872:E/AndroidRuntime(22041):致命异常:主
09-26 13:31:26.872:E/AndroidRuntime(22041):进程:com.example.networkping,PID:22041
09-26 13:31:26.872:E/AndroidRuntime(22041):java.lang.NullPointerException
09-26 13:31:26.872:E/AndroidRuntime(22041):在com.example.networkping.MainActivity$1.onClick(MainActivity.java:43)
09-26 13:31:26.872:E/AndroidRuntime(22041):在android.view.view.performClick(view.java:4562)
09-26 13:31:26.872:E/AndroidRuntime(22041):在android.view.view$PerformClick.run(view.java:18918)
09-26 13:31:26.872:E/AndroidRuntime(22041):在android.os.Handler.handleCallback(Handler.java:808)
09-26 13:31:26.872:E/AndroidRuntime(22041):在android.os.Handler.dispatchMessage(Handler.java:103)上
09-26 13:31:26.872:E/AndroidRuntime(22041):在android.os.Looper.loop(Looper.java:193)上
09-26 13:31:26.872:E/AndroidRuntime(22041):位于android.app.ActivityThread.main(ActivityThread.java:5388)
09-26 13:31:26.872:E/AndroidRuntime(22041):位于java.lang.reflect.Method.Invokenactive(本机方法)
09-26 13:31:26.872:E/AndroidRuntime(22041):位于java.lang.reflect.Method.invoke(Method.java:515)
09-26 13:31:26.872:E/AndroidRuntime(22041):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-26 13:31:26.872:E/AndroidRuntime(22041):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655)
09-26 13:31:26.872:E/AndroidRuntime(22041):在dalvik.system.NativeStart.main(本机方法)
非活动异步任务类
公共类Internet任务{
串萨姆;
语境;
活动;
公共互联网(活动ac){
活动=交流;
}
公共布尔值isNetworkAvailable(){
ConnectivityManager ConnectivityManager=(ConnectivityManager)context.getSystemService(context.CONNECTIVITY_服务);
NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
返回activeNetworkInfo!=null&&activeNetworkInfo.isConnected();
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
//Toast.makeText(getApplicationContext(),“Success”,Toast.LENGTH\u SHORT.show();
sam=“1”;
意图视图=新意图(活动,MainActivity.class);
view.putExtra(“zipcode”,sam.toString());
活动。startActivityForResult(视图1);
}
否则{
//Toast.makeText(getApplicationContext(),“Failure”,Toast.LENGTH_SHORT.show();
sam=“0”;
意图视图=新意图(活动,MainActivity.class);
view.putExtra(“zipcode”,sam.toString());
活动。startActivityForResult(视图1);
}
}
@凌驾
受保护的布尔doInBackground(Void…params){
if(isNetworkAvailable()){
试一试{
HttpURLConnection urlc=(HttpURLConnection)(新URL(“http://www.google.com);
connect();
int resp=urlc.getResponseCode();
返回响应==200;
}捕获(IOE异常){
//Log.e(Log_标签,“错误检查互联网连接”,e);
System.out.println(“错误检查互联网连接”+e);
}
}否则{
//Log.d(Log_标签,“无可用网络!”);
System.out.println(“没有可用的网络!”);
}
返回false;
}
}
main活动
公共类MainActivity扩展了活动{
按钮检查;
字符串zipcode;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
zipcode=getIntent().getExtras().getString(“zipcode”);
Toast.makeText(getApplicationContext(),zipcode,3000).show();
检查=(按钮)findViewById(R.id.check);
check.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
//新建CheckInternetConnection().execute();
//字符串zipcode=getIntent().getExtras().getString(“zipcode”);
if(zipcode.equals(“1”)){
Toast.makeText(getApplicationContext(),“Success”,Toast.LENGTH\u SHORT.show();
}else if(zipcode.equals(“0”)){
Toast.makeText(getApplicationContext(),“Failure”,Toast.LENGTH_SHORT.show();
}
}
});
}//一次创建
}//活动
尝试使用

zipcode = getIntent().getStringExtra("zipcode");
而不是

zipcode = getIntent().getExtras().getString("zipcode");

实现这一点最简单、最有效的方法是使用事件。在android中,与大多数其他开发环境一样,您总是希望避免代码中的耦合——这意味着您希望尽可能多的松散耦合,以避免类的某些部分对其他部分了解太多

因此,使用library(非常流行和推荐),只要活动订阅了internet连接状态,您就可以通过发布新事件来通知该活动

然后您只需覆盖一个onEvent(EventClassName