【问题标题】:Android - for loop terminating earlyAndroid - for循环提前终止
【发布时间】:2014-12-31 02:34:11
【问题描述】:

我正在尝试操作 JSONArray,rawJArr,(取自 Reddit API),并从每个对象获取 url 和位图(取自 gfycat “API”)以创建 ArrayList (@987654322 @) 的 Highlight 实例将被转换为包含图片、简短描述和 gfycat 链接的 CardView

try {

    int count = 0;
    int highlightMax;
    Bitmap bitmap = null;
    Highlight curHighlight;
    myJSON = new JSONObject(rawJSON);
    curJSON = myJSON.getJSONObject("data");
    rawJArr = curJSON.getJSONArray("children");

    String strHighlightNo =  mySPrefs.getString("pref_highlightNo", "notFound");

    if(strHighlightNo.equals("notFound")) {
        Log.w("FT", "shared pref not found");
        return null;
    }

    highlightMax = Integer.parseInt(strHighlightNo);

    Log.w("Arr Length", Integer.toString(rawJArr.length()));
    Log.w("Highlight No", Integer.toString(highlightMax));

    for(int i=0; i < rawJArr.length(); i++) {

        Log.w("Count", Integer.toString(count));
        Log.w("I", Integer.toString(i));

        if(count == highlightMax) {
            Log.w("FT", "Breakpoint reached!");
            break;
        }

        curJSON = rawJArr.getJSONObject(i).getJSONObject("data");

        String url = curJSON.getString("url");
        String[] parts = url.split("//");
        String imageUrl = "http://thumbs." + parts[1] + "-thumb100.jpg";

        try {
            bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageUrl).getContent());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        // if there is no available picture, then don't include one in the Highlight
        if(bitmap == null) {
            Log.w("FT", "Null bitmap");
            curHighlight = new Highlight(curJSON.getString("title"), url, null);
            listing.add(curHighlight);
            count++;
        } else {
            Log.w("FT", "Bitmap Available");
            curHighlight = new Highlight(curJSON.getString("title"), url, bitmap);
            listing.add(curHighlight);
            count++;
        }

    }


    } catch(JSONException e) {
        e.printStackTrace();
        return listing;
    }

但是,我的 for 循环终止得太早了。我正在使用的当前 JSONArray 的长度为 25,并且我指定了 15 的 pref_highlightNo,但我的 for 循环在 6 次迭代后终止。

我在 for 循环中的 Log.w 测试都记录了相同的计数(计数:1,整数:1 - 计数:6,整数:6)。

我很难理解为什么我的循环会终止:没有堆栈跟踪打印到我的控制台,而且我的应用程序没有崩溃。

知道发生了什么吗?

【问题讨论】:

  • 你用过调试器吗? rawJarr.length() 的值是多少
  • @yts - 25,我在进入 for 循环之前记录了它
  • 继续调试。在每次迭代中检查 count 和 highlightmax 的值。不要只记录。使用调试器会给你一步一步的分析。

标签: java android json bitmap


【解决方案1】:

原来问题是针对我试图创建的最后一个 URL 以获得所需的 gfycat - 我没有任何代码来处理链接以 http://www 开头的情况。

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多