4

嗨,这是我的助手类,我在其中检查内部连接和 xml 解析并将此类用于另一个活动问题是当服务器连接正常但当服务器没有响应或无效输入代码突然停止时,我发现 asyntask 来解决这个问题isse 但我的问题是如何在这段代码中使用 AsyncTask ?或者如果服务器没有响应错误消息连接错误 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 显示在日志上但不显示在 toast 上,我该怎么做才能使我的应用程序在服务器没有响应时不会爆炸?任何想法?

 public class AgAppHelperMethods {

     private static final String LOG_TAG = null;

     private static AgAppHelperMethods instance = null;

     public static String varMobileNo;
     public static String varPinNo;
     String[][] xmlRespone = null;

     public static String getUrl() {
         String url = "https://demo.accessgroup.mobi/";
         return url;
     }

     public static String[][] AgAppXMLParser(String parUrl) {
         String _node, _element;
         String[][] xmlRespone = null;
         try {
             String url = AgAppHelperMethods.getUrl() + parUrl;
             URL finalUrl = new URL(url);
             DocumentBuilderFactory dbf =
                 DocumentBuilderFactory.newInstance();
             DocumentBuilder db = dbf.newDocumentBuilder();
             Document doc = db.parse(new InputSource(finalUrl.openStream()));
             doc.getDocumentElement().normalize();

             NodeList list = doc.getElementsByTagName("*");
             _node = new String();
             _element = new String();
             xmlRespone = new String[list.getLength()][2];

             for (int i = 0; i < list.getLength(); i++) {
                 Node value = list.item(i).getChildNodes().item(0);
                 _node = list.item(i).getNodeName();
                 _element = value.getNodeValue();
                 xmlRespone[i][0] = _node;
                 xmlRespone[i][1] = _element;
             } //end for
         } //end try
         catch (Exception e) {
             // Toast.makeText(context, "error  server not responding " +  
             e.getMessage(), Toast.LENGTH_LONG).show();
         Log.e(LOG_TAG, "Connection Error aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
             e);
         // Do something else, if wanted.
     }
     return xmlRespone;
 }
4

3 回答 3

6

创建一个全局变量,如:

Context mContext;

然后向您的类添加一个构造函数,在其中您接受一个Context参数并将其分配给 mContext ,例如:

public AgAppHelperMethods(Context context) {
      mContext = context;
}

在您的活动中创建一个对象,例如:

AgAppHelperMethods helper = new AgAppHelperMethods(getBaseContext());

最后,展示你的 Toast 用法:

 Toast.makeText(mContext, "error  server not responding " + e.getMessage(), Toast.LENGTH_LONG).show();
于 2012-08-15T06:33:29.807 回答
1

在您的应用程序类中创建 myToast 方法,例如

public void myToast(String msg) {
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

并将以下代码添加到您的课程中,

private MyApplication application;
public AgAppHelperMethods(Context context) {
  application = (MyApplication)context.getApplication();
}

最后,在你想要的地方调用 myToast 方法,比如

applicaion.myToast("msg you want to show");

注意:将 MyApplication 替换为您的应用程序类

我没有测试过,但这可能对你有用。

于 2012-08-15T07:21:04.520 回答
1

您需要在 toast 中定位您的 applicationContext,我在任何地方都看不到您这样做?而且您已经对您的吐司信息的第一行进行了评论?

编辑:也非常糟糕的代码样式来捕获异常 e。您应该尝试缩小要捕获的异常类型。

于 2012-08-15T06:32:42.793 回答