如何处理来自 volley onResponse 方法的网络访问

如何解决如何处理来自 volley onResponse 方法的网络访问

我正在尝试通过从 api 服务器获取指令来构建一个底部导航栏。

*当前代码抛出 [java.lang.IllegalStateException],因为它从 onResponse 方法调用 Picasso。

void updateMenuItems(RequestQueue queue,Menu menu){
    String url = "http://10.0.2.2:5000/api/menuIcons";

    //Request a string response from the provided URL
    JsonArrayRequest jsonArrRequest = new JsonArrayRequest (Request.Method.GET,url,null,new Response.Listener<JSONArray>(){
        @Override
        public void onResponse(JSONArray response) {
            Log.e("updateMenu",response.toString());

            List<MenuItems> menuItemsList = new ArrayList<MenuItems>();

            for(int i = 0; i<response.length(); i++){
                try {
                    JSONObject jsonItem = response.getJSONObject(i);
                    String imageLink = jsonItem.getString("image");

                    menu.add(0,jsonItem.getInt("id"),jsonItem.getString("name")).setIcon(new BitmapDrawable(getResources(),Picasso.get().load(imageLink).get()));

                } catch (JSONException | IOException e) {
                    e.printstacktrace();
                }
            }
        }
    },new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("updateMenu","response error");
        }
    });

    queue.add(jsonArrRequest);
}

服务器发送的JSON文件如下

app.get('/api/menuIcons',(req,res) => {
  res.send([
    {
      'id': 1,'name': 'Home','url': 'http://10.0.2.2:3000/','image': "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Home_Icon.svg/1200px-Home_Icon.svg.png"
    },{
      'id': 2,'name': 'Dashboard','url': 'http://google.com/',{
      'id': 3,'name': 'Alarm','url': 'https://google.com/',{
      'id': 4,'name': 'Setting','image': "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Home_Icon.svg/1200px-Home_Icon.svg.png"
    }
  ]);
});

问题来了。我可以通过一个 Volley 请求添加没有图标的菜单项。 但是,要将图像图标添加菜单项,我需要访问图像 URL,这需要另一个异步线程。

我不想在 volley call 中声明另一个 volley call(它只是乱七八糟)。 我想知道是否有结构上更好的解决方案。

解决方法

我注意到不允许来自 onResponse 方法的网络连接,因为 onResponse 方法在 UI 线程中运行。相反,我实施了 请求 类并在其中修改了 parseNetworkResponse。由于 parseNetworkResponse 在单独的线程中运行,因此我可以在该函数内运行其他同步网络请求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?