2016-11-01 7 views
-2

У меня есть следующий класс Utils, и я хочу написать дружественный тост пользователей, в блоке поймать, как это:Как показать тост в статическом методе класса 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

Чтобы сделать все, что связано с UI вам нужно иметь context, так что вы не можете отобразить Toast без него.

Итак, вы можете создать класс Application и добавить свой контекст в свои круги и использовать его, когда захотите.

Шаги:

1.) создать класс и расширяет класс приложения

class App extends Application{ 
    } 

2.) регистрирует свой класс в манифесте приложения тег

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

3.) создать статический держатель контекста и статическая функция

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

4.) использовать статическую функцию, чтобы получить контекст

Follow this link to see the coding example

Так в конце концов ваша функция тост будет выглядеть

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

Или

Другой вариант передать свой контекст Activity к этой функции 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

спасибо Im не перед моей Android Studio прямо сейчас. попробует это позже –

+0

, что не работает, потому что класс, вызывающий этот метод, - это GcmTaskService, и я не знаю, как передать свою активность: 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(); 
} 

КПП. Почему вы не используете gson (https://github.com/google/gson) для вашего json mapping?