如果发生异常,我试图从catch阻止意图。它不是故意的。当我输入错误的IP时,它会给出" malformedurlexception"为此,我需要从另一个活动中更改我的IP地址,请帮助我。
日志文件:
代码:
protected class AsyncLogin extends AsyncTask<String, JSONObject, Boolean> {
String userName = null;
@Override
protected Boolean doInBackground(String... params) {
RestAPI api = new RestAPI();
boolean userAuth = false;
try {
// Call the User Authentication Method in API
JSONObject jsonObj = api.UserAuthentications(params[0],
params[1]);
JSONParser parser = new JSONParser();
userAuth = parser.parseUserAuth(jsonObj);
userName = params[0];
//Parse the JSON Object to boolean
} catch (Exception e) {
// TODO Auto-generated catch block
Intent openStartingPoint = new Intent(getApplicationContext(), AlertForIp.class);
openStartingPoint.putExtra("Forcheck", "Yes");
startActivity(openStartingPoint);
Log.d("AsyncLogin", e.getMessage());
}
return userAuth;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
//Check user validity
if (result) {
Intent i = new Intent(Sample.this,
MainActivity.class);
i.putExtra("ForButton", cnt);
i.putExtra("Uname", userName);
startActivity(i);
} else {
Toast.makeText(context, "Not valid username/password and Re-enter IP", Toast.LENGTH_SHORT).show();
Intent i = new Intent(Sample.this, AlertForIp.class);
i.putExtra("Forcheck", "Yes");
startActivity(i);
}
}
}
答案 0 :(得分:0)
我认为该异常应该与api.UserAuthentications(params[0], params[1]);
在触发意图时,我会采用不同的方法。 在doInBackground中,在异常时,我会将“错误”状态作为结果传递给onPostExecute()。
在onPostExecute中,将错误状态返回给调用活动。
最后在ui线程中有调用活动,启动新活动。
快速测试替换
} catch (Exception e) {
// TODO Auto-generated catch block
Intent openStartingPoint = new Intent(getApplicationContext(), AlertForIp.class);
openStartingPoint.putExtra("Forcheck", "Yes");
startActivity(openStartingPoint);
Log.d("AsyncLogin", e.getMessage());
}
与
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("AsyncLogin", e.getMessage());
return false;
}
通过返回false,onPostExecute()将接收false作为结果参数。根据“if”,它将在doInBackground的catch子句中执行相同的操作。
区别在于onPostExecute在UI线程上运行而doInBackground没有。
如果有效,那么您可以将错误条件返回到onPostExecute中的调用活动。