如果发生异常,如何从Catch Block意图

时间:2017-04-14 13:20:50

标签: android android-asynctask try-catch

如果发生异常,我试图从catch阻止意图。它不是故意的。当我输入错误的IP时,它会给出" malformedurlexception"为此,我需要从另一个活动中更改我的IP地址,请帮助我。

日志文件: This is image of Log file

代码:

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);


            }

        }

    } 

1 个答案:

答案 0 :(得分:0)

我认为该异常应该与api.UserAuthentications(params[0], params[1]);

中调用的url相关

在触发意图时,我会采用不同的方法。 在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中的调用活动。