我有以下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();
}
.....
答案 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映射?