4

こんにちは、これは私のヘルパー クラスです。内部接続と xml パーシングをチェックし、このクラスを別のアクティビティに使用します。問題は、接続されたサーバーが正常に動作しているが、サーバーが応答していない場合、または無効な入力コードが予期せず爆発停止した場合です。これを解決する ayntask を見つけます。 isse ですが、私の問題は、このコードで AsyncTask を使用するにはどうすればよいですか? または、サーバーが応答しない場合にトーストメッセージを表示する方法エラーメッセージ接続エラーaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaはログに表示されますが、トーストには表示されませんサーバーが応答しないときにアプリケーションが爆発しないようにするにはどうすればよいですか? 何か案が?

 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

トーストで applicationContext をターゲットにする必要があります。トースト メッセージの最初の行をアウトコメントしましたか?

編集:例外eをキャッチするためのコードスタイルも本当に悪いです。キャッチしたい例外の種類を絞り込むようにしてください。

于 2012-08-15T06:32:42.793 に答える
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 に答える