简体   繁体   English

Volley ui 冻结解析数据

[英]Volley ui freeze on parsing data

I'm using this code for sending data to server , but when i want to parser response data on volley onResponse method , my UI freezing .我正在使用此代码将数据发送到服务器,但是当我想在 volley onResponse方法上解析响应数据时,我的 UI 冻结了。

JsonObjectRequest req = new JsonObjectRequest(Method.GET, url, null, new Response.Listener<JSONObject>()
{
    @Override
    public void onResponse(JSONObject response) 
    {
        parseFromJsonObject(response);
    }
}, 
new Response.ErrorListener() 
{
    @Override
    public void onErrorResponse(VolleyError error) 
    {

    }
});

RequestHelper.getInstance().addToRequestQueue(req, this);

And it's parser method它是解析器方法

public boolean parseFromJsonObject(JSONObject response)
{
    boolean validResponse = super.isValidResponse(response);
    try
    {
        if(response.has("keywords"))
        {
            JSONObject keywords = response.getJSONObject("keywords");
            Iterator<?> langIterator = keywords.keys();
            ArrayList<LanguagesStorage> languagesStorageArray = new ArrayList<LanguagesStorage>();
            while(langIterator.hasNext())
            {
                String lang = (String) langIterator.next();
                JSONObject langValues = keywords.getJSONObject(lang);

                Iterator<?> valueIterator = langValues.keys();
                while(valueIterator.hasNext())
                {
                    String key = (String) valueIterator.next();
                    String value = (String) langValues.getString(key);

                    LanguagesStorage languagesStorage = new LanguagesStorage();
                    languagesStorage.setKey(key);
                    languagesStorage.setLang(lang);
                    languagesStorage.setValue(value);
                    languagesStorageArray.add(languagesStorage);
                }
            }
            if(languagesStorageArray.size() > 0)
            {
                LanguageAdapter languageAdapter = new LanguageAdapter();
                languageAdapter.insert(languagesStorageArray, true);
            }
        }

        return lastParsingStatus = true;
    }
    catch (JSONException e)
    {
        RLog.error("Parsing error in keyword Parser " + e);
        return lastParsingStatus = false;
    }


}

What is the issue ?这是什么问题? Why my UI thread freezing?为什么我的 UI 线程冻结?

Volley onResponce work inside the UI thread Volley onResponce在 UI 线程内工作

I recommend you to do parsing inside a separate thread.我建议您在单独的线程中进行解析。

在您的parseFromJsonObject方法中,尝试创建一个新Thread并在该线程内执行您的解析数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM