为什么Android Toast没有出现?

为什么Android Toast没有出现?,android,toast,Android,Toast,我有一个问题要解决 您必须在片段中使用getActivity或getContext来获取默认上下文并使用它。 因此,清除v.getContext并调用上述方法之一makeText方法重载时,可以通过传递资源ID来加载它 makeTextContext上下文,int resId,int duration 或传递文本以显示 makeTextContext、CharSequence文本、int duration 如果使用整数live_match.length加载,Android会尝试加载所需的资源,但

我有一个问题要解决

您必须在片段中使用getActivity或getContext来获取默认上下文并使用它。 因此,清除v.getContext并调用上述方法之一

makeText方法重载时,可以通过传递资源ID来加载它

makeTextContext上下文,int resId,int duration

或传递文本以显示

makeTextContext、CharSequence文本、int duration

如果使用整数live_match.length加载,Android会尝试加载所需的资源,但找不到该资源,因此不会显示Toast。为了达到您的目标,您必须将该整数转换为字符串字符序列,正如注释中所述

Toast.makeText(getActivity(), String.valueOf(live_match.length()), Toast.LENGTH_LONG).show();
如果这不起作用,请确保您可以从那里触摸主线程,我认为您正在后台线程中加载Toast,其中不允许触摸用户界面

问题在于解析JSON响应

Web服务API响应在JSONObject中出现,您正在JSONArray中处理它。 见

更正处理响应的代码,它就会工作

请注意,您必须通过使用迭代器迭代循环来获取值,因为matches对象包含JSONObject

更新您的onResponse方法,如下所示:

@Override
public void onResponse(String response) {
    try {
        JSONObject jsonObject = new JSONObject(response);
        Log.e("Response: ", jsonObject.toString());
        JSONObject objMatch = jsonObject.optJSONObject("matches");
        Iterator<String> iterator = objMatch.keys();
        int counter = 0;

        while (iterator.hasNext()) {
            String key = iterator.next();
            try {
                JSONObject value = objMatch.getJSONObject(key);
                Log.e("Value: ", value.toString());
                // Here you have to add values in Items_list  and then after add it in matches list
                counter++;
            } catch (JSONException e) {
                // Something went wrong!
            }
        }
        Toast.makeText(getActivity(), "Total Records: " + counter, Toast.LENGTH_LONG).show();
        // After competition of iterator loop, you have to set that List in RecyclerView Adapter here
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

祝酒词只能在活套线程(如主线程)上显示。我猜是来自工作线程上运行的截击的回调

从主线程显示您的祝酒词:

getActivity().runOnUiThread({
    Toast.makeText(...).show()
})
我使用的是Java8Lambda表示法,但您可以将其调整为Runnable



也就是说,请阅读所有其他答案。

尝试getActivity而不是v。getContext@Suleyman仍然没有获取您在参数中传递了错误的resId到makeTextContext,int resId,int duration-live_match.length不是有效的资源id@ADM我也用过,但还是没用working@pskink那么怎么做呢?@Mansur Asif你试过log而不是toast吗我认为toast在线程和截击响应线程中都不起作用,我在控制台上得到json,但在deviceok上没有,正如我说的,不能在截击OnResponse中显示toast,只需编写一个方法,并将消息作为参数传入,然后在该方法中将toast写入work@Mansur如果你试过我上面说的写作方法吗?不,兄弟,我真的没有得到你想要的问题仍然存在here@MansurAsif或者@MansurAsif你确定你可以从那里触摸UI吗?你在正确的线程中吗?我这里没有显示任何UI,我只是有recyclerview,我在其中修改了它,但没有响应。通过显示你正在触摸UI的祝酒词,检查@eugen pechanec回答我在这里给出的一段代码,如果有任何错误,请更正,请给我几分钟时间。@MansurAsif检查我更新的答案。您必须管理匹配的值,并且必须根据您的需求和模型类自行将这些值添加到列表中。非常欢迎您。你也可以投票支持我的答案,这样对其他人会有帮助。快乐编码。请再问一个问题,现在我如何在recyclerview中填充这些匹配项?
getActivity().runOnUiThread({
    Toast.makeText(...).show()
})