如何在Util类的静态方法中显示toast?

时间:2016-11-01 13:00:47

标签: android android-fragments toast

我有以下Utils类,我想在catch块中为我的用户写一个友好的toast,如下所示:

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();
}
  .....

3 个答案:

答案 0 :(得分:1)

要执行与UI相关的任何操作,您需要context,以便在没有Toast的情况下显示Application

因此,解决方案是您可以创建static类并添加 class App extends Application{ } 上下文,并在需要时使用它。

步骤:

1。)创建一个类并扩展Application类

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

2。)在清单申请标签

中注册您的班级
   private static Context context;
   public static Context getAppContext() {
        return context;
   }

3。)创建静态上下文持有者和静态函数

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

4.)使用静态函数获取上下文

Follow this link to see the coding example

所以最终你的吐司功能看起来像

quoteJsonToContentVals

另一个选项是将您的Activity上下文传递给此d[[1]]函数(如果可以),并在您的类中创建一个上下文持有者并使用它。

答案 1 :(得分:1)

试试这个。

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

答案 2 :(得分: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();
}

顺便说一下。为什么不使用gson(https://github.com/google/gson)进行json映射?