求高人指点 一个登陆事件网络状态的监听有关问题
求高人指点 一个登陆事件网络状态的监听问题
我写了一个登陆的点击事件,在登陆的时候访问服务器,之间有个网络状态的判断。
如果我打开应用,进入登陆界面的时候手机联网的话,登陆成功 没问题
问题是 如果我进入登陆界面的时候,手机没联网 登陆失败,显示 “你目前没有网络连接”,可是此时连上网,(注:我此时手机联网,依然停留在登陆界面),点击登陆依然是登陆失败,提示我没有网络连接。
以下是我的代码
这是服务的代码
我写了一个登陆的点击事件,在登陆的时候访问服务器,之间有个网络状态的判断。
如果我打开应用,进入登陆界面的时候手机联网的话,登陆成功 没问题
问题是 如果我进入登陆界面的时候,手机没联网 登陆失败,显示 “你目前没有网络连接”,可是此时连上网,(注:我此时手机联网,依然停留在登陆界面),点击登陆依然是登陆失败,提示我没有网络连接。
以下是我的代码
public class LoginActivity extends Activity {
private ProgressDialog pd;
private boolean isNetWork;
private EditText username;
private EditText password;
private String nameStr;
private String passwordStr;
private SharedPreferences shared;
private Intent service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
username = (EditText) this.findViewById(R.id.username);
password = (EditText) this.findViewById(R.id.password);
username.setText("admin");
password.setText("123456");
pd = new ProgressDialog(this);
pd.setMessage("正在加载中......");
}
/**
* 点击登陆按钮要触发的事件
* @throws Exception
*/
public void btn_login(View v) throws Exception{
nameStr = username.getText().toString().trim();
passwordStr = password.getText().toString().trim();
if(StringUtils.isEmpty(nameStr)||StringUtils.isEmpty(passwordStr)){
Toast.makeText(LoginActivity.this,"对不起,用户名与密码不能为空!!",5).show();
}else{
new LoginTask().execute();
}
}
/**
* 登陆事件的异步任务
* @author scuser
*
*/
public final class LoginTask extends AsyncTask<String,Void,Map<String,Object>>{
@Override
protected void onPreExecute() {
pd.show();
}
@Override
protected Map<String,Object> doInBackground(String... params) {
try {
String path = Constant.URL.login+"/"+nameStr+"/"+passwordStr;
Map<String,String> map = new HashMap<String, String>();
map.put("name", nameStr);
map.put("password", passwordStr);
byte[] data = Tools.sendHttpGet(path, map);
String json = new String(data,"utf-8");
return parseJson(json);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Map<String,Object> result) {
pd.dismiss();
if(!isNetWork){
Toast.makeText(LoginActivity.this,"你目前没有网络链接,请检查网络设置!!",Toast.LENGTH_LONG).show();
return;
} if(result ==null){
Toast.makeText(LoginActivity.this,"网络链接出现异常!!",Toast.LENGTH_LONG).show();
return;
}else{
String content = (String) result.get("code");
if(isNetWork==true &&"SUCCESS".equals(content)){
shared = LoginActivity.this.getSharedPreferences("userInfo", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
String name = (String) result.get("name");
String password = (String) result.get("password");
editor.putString("name", name);
editor.putString("password", password);
editor.commit();
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent);
}else if(isNetWork==true &&"FAIL_BUS".equals(content)){
Toast.makeText(LoginActivity.this,"对不起你的用户名或者密码不正确!!!",5).show();
}
}
}
}
/**
* 用来监听网络状态的广播
*/
public BroadcastReceiver receiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//得到网络连接状态
boolean netState = intent.getBooleanExtra("netState", true);
isNetWork = netState;
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
stopService(service);
}
@Override
protected void onStart() {
super.onStart();
//在此启动一个服务,用来监听网络状态
service = new Intent();
service.setAction("com.tematch.networkstate");
startService(service);
//动态注册一个广播
IntentFilter filter = new IntentFilter();
filter.addAction("com.tematch.recevier");
registerReceiver(receiver, filter);
}
}
这是服务的代码
public class NetworkStateService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {