2016-11-01 3 views
-2

私は、次のUtilsのクラスを持っていると私はこのようなcatchブロックで私のユーザーに優しいトーストを書きたい:Utilクラスの静的メソッドでトーストを表示するには?

catch (JSONException e){ 
    Log.e(LOG_TAG, "String to JSON failed: " + e); 
    showToast(getActivity, "Test toast"); 
} 

しかし、問題は、私は自分の活動やアプリケーションコンテキストを得るのですかですか? 私はこれを試しましたhttps://stackoverflow.com/a/23423970私のコンテキストを取得する場所がわからないので、それは私のために動作しません? Utilクラスのコンストラクタを作成しなければならない場合、このクラスをインスタンス化したくないのでUtilクラスの目的を無効にします。

はここに私のクラスです:

public class Utils { 
    public static boolean showPercent = true; 

    public static ArrayList quoteJsonToContentVals(String JSON){ 
    ArrayList<ContentProviderOperation> batchOperations = new ArrayList<>(); 
    JSONObject jsonObject = null; 
    JSONArray resultsArray = null; 
    try{ 
     jsonObject = new JSONObject(JSON); 
     if (jsonObject != null && jsonObject.length() != 0){ 
     jsonObject = jsonObject.getJSONObject("query"); 
     int count = Integer.parseInt(jsonObject.getString("count")); 
     if (count == 1){ 
      jsonObject = jsonObject.getJSONObject("results") 
       .getJSONObject("quote"); 
      batchOperations.add(buildBatchOperation(jsonObject)); 
     } else{ 
      resultsArray = jsonObject.getJSONObject("results").getJSONArray("quote"); 

      if (resultsArray != null && resultsArray.length() != 0){ 
      for (int i = 0; i < resultsArray.length(); i++){ 
       jsonObject = resultsArray.getJSONObject(i); 
       batchOperations.add(buildBatchOperation(jsonObject)); 
      } 
      } 
     } 
     } 
    } catch (JSONException e){ 
     Log.e(LOG_TAG, "String to JSON failed: " + e); 
     showToast(getActivity, "Test toast"); 
    } 
    return batchOperations; 
    } 

    public static void showToast(Context context, String text) { 
    Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
} 
    ..... 
+0

'Toast'を表示するには、有効なコンテキストが必要です。 –

答えて

1

あなたがそうあなたはそれなしでToastを表示することができませんcontextを持っている必要がありUIに関連する何かをします。

解決策は、Applicationクラスを作成し、staticコンテキストを追加して、必要なときに使用することです。

ステップ:

1)クラスを作成し、Applicationクラス

class App extends Application{ 
    } 

2を拡張)

<application android:name="com.yourpackage.App"> 

3.アプリケーションマニフェストタグにクラスを登録する)静的を作成しますコンテキスト保持者および静的関数

private static Context context; 
    public static Context getAppContext() { 
     return context; 
    } 

4.)だから、最終的にあなたのトースト機能が

public static void showToast(String text) { 
    Toast.makeText(App.getAppContext(), text, Toast.LENGTH_LONG).show(); 
} 

それとも

のようになります。他のオプションは、あなたのActivityコンテキストを渡しているコンテキスト

Follow this link to see the coding example

を取得するには、静的な関数を使用しますこのquoteJsonToContentVals関数に(できるならば)あなたのクラスにコンテクストホルダーを作ってそれを使ってください。

0

これを試用してください。 (コンテキストが十分にあるので、ない活動)

public static ArrayList quoteJsonToContentVals(Activity activity, String JSON){ 
     ArrayList<ContentProviderOperation> batchOperations = new ArrayList<>(); 
     JSONObject jsonObject = null; 
     JSONArray resultsArray = null; 
     try{ 
      jsonObject = new JSONObject(JSON); 
      if (jsonObject != null && jsonObject.length() != 0){ 
      jsonObject = jsonObject.getJSONObject("query"); 
      int count = Integer.parseInt(jsonObject.getString("count")); 
      if (count == 1){ 
       jsonObject = jsonObject.getJSONObject("results") 
        .getJSONObject("quote"); 
       batchOperations.add(buildBatchOperation(jsonObject)); 
      } else{ 
       resultsArray = jsonObject.getJSONObject("results").getJSONArray("quote"); 

       if (resultsArray != null && resultsArray.length() != 0){ 
       for (int i = 0; i < resultsArray.length(); i++){ 
        jsonObject = resultsArray.getJSONObject(i); 
        batchOperations.add(buildBatchOperation(jsonObject)); 
       } 
       } 
      } 
      } 
     } catch (JSONException e){ 
      Log.e(LOG_TAG, "String to JSON failed: " + e); 
      showToast(activity, "Test toast"); 
     } 
     return batchOperations; 
     } 
public static void showToast(Activity activity, String text) { 
    Toast.makeText(activity, text, Toast.LENGTH_LONG).show(); 
+0

私のAndroidスタジオの前ではありません。このメソッドを呼び出すクラスがGcmTaskServiceで、私のアクティビティを渡す方法がわからないので、後で –

+0

を試してみます:Utils.quoteJsonToContentVals(getResponse、ここでは何を入力しますか? –

+0

サービス自体はコンテキストなので、GcmTaskServiceを渡すだけです。アクティビティではなくコンテキストとしてのこの –

0

は、単にあなたのquoteJsonToContentVals()メソッドにコンテキストを渡します。

public static ArrayList quoteJsonToContentVals(Context context, String JSON){ 

    ... 

     showToast(context, "Test toast"); 

    ... 

} 

public static void showToast(Context context, String text) { 
    Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
} 

Btw。あなたのjsonマッピングにgson(https://github.com/google/gson)を使用していないのはなぜですか?

関連する問題