我试图在我的实用程序类中抛出异常时显示SnackBar
。
Utils.class
public class Utils {
private static String LOG_TAG = Utils.class.getSimpleName();
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 (Exception e)
{
runError(); // <-- The method that displays the Snackbar
}
return batchOperations;
}
而且,现在这里是尝试显示SnackBar
:
private static void runError()
{
Snackbar.make(this.findViewById(android.R.id.content), "OOPS that's an error :/", Snackbar.LENGTH_LONG).show();
}
现在,问题是:我无法context
致电SnackBar
。我尝试将this
替换为:
getContext()
getActivity()
getApplicationContext()
由于这一切都没有奏效,我尝试创建一个Application类来全局获取上下文。
public class StockMain extends Application
{
private static StockMain instance;
public static StockMain getInstance() {
return instance;
}
public static Context getContext(){
return instance;
// or return instance.getApplicationContext();
}
@Override
public void onCreate() {
instance = this;
super.onCreate();
}
}
并尝试将方法runError()
更改为:
private static void runError()
{
Snackbar.make(StockMain.getContext().findViewById(android.R.id.content), "OOPS that's an error :/", Snackbar.LENGTH_LONG).show();
}
不幸的是,这不起作用! 那么,如何解决这个问题呢?
答案 0 :(得分:0)
您可以在Util类中创建构造函数,并将Activity / Fragment的上下文传递给Util类。像这样:
public class Utils { 上下文mContext;
//创建构造函数
public Utils(Context context)
{
mContext = context;
}
//其余的代码 }
和你的 runError()
private void runError()
{
Snackbar.make(mContext.findViewById(android.R.id.content), "OOPS that's an error :/", Snackbar.LENGTH_LONG).show();
}
答案 1 :(得分:0)
尝试将view
参数传递给您的方法,如下所示 -
quoteJsonToContentVals(View view, String JSON)
其中view
可以是Activity
中引用的任何视图。
runError(view);
更改方法如下 -
private static void runError(View view) {
Snackbar.make(view, "OOPS that's an error :/", Snackbar.LENGTH_LONG).show();
}