如何在不单击按钮的情况下在 onCreate() 中运行方法

如何解决如何在不单击按钮的情况下在 onCreate() 中运行方法

现在,我必须在我的应用程序启动时单击该按钮两次才能显示数据。我想要 打开显示数据的应用程序。如果不使用 onclick 方法,来自 volley api 请求的数据不会加载。我正在使用 recyclerviw 将数据绑定到视图。我什至尝试创建一个单独的类来获取数据,但只适用于按钮点击。

    private ArrayList<Stocks_data_model> exampleList;
    private RequestQueue mQueue;
    static String t;
    static String n;
    static String p;
    static String c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mQueue = MySingleton.getInstance(this).getRequestQueue();
        exampleList = new ArrayList<>();


        findViewById(R.id._button).setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                     my_func(exampleList);

                } catch (Exception e) {
                    e.printstacktrace();
                }
            }
        });

        //real data
    }


    public  void my_func(ArrayList mAr){
//         exampleList = new ArrayList<>();

        String _url = "";
        // Todo: Handle error
        //                    Toast.makeText(getApplicationContext(),"[NETWORK ERROR]\nCheck Data Connection...",Toast.LENGTH_SHORT).show();
        JsonObjectRequest req_Gainers2 = new JsonObjectRequest
                (Request.Method.GET,_url,null,response -> {
                    try {
                        Log.d("tag","working");

                        for(int i=0; i<5; i++){
                        JSONArray gainers = response.getJSONArray("mostGainerStock");
                        JSONObject myData = gainers.getJSONObject(i);
                        String _name = myData.getString("companyName");
                        String _ticker = myData.getString("ticker");
                        String _price = myData.getString("price");
                        double _changes = myData.getDouble("changes");
                        String _change_percent = myData.getString("changesPercentage");

                        mAr.add(new Stocks_data_model(_ticker,_name,_price,_change_percent));
//                         exampleList.add(new Stocks_data_model(_ticker,"name","$10.99",_change_percent));

                            t = _ticker;
                            n=_name;
                            p=_price;
                            c=_change_percent;


                        }
                    } catch (JSONException e) {
                        e.printstacktrace();
                    }

                },Throwable::printstacktrace);
//         mQueue.add(req_Gainers2);
        mQueue.add(req_Gainers2);

        buildrecyclerView();

    }
}

经过一些反馈,这是我尝试过的新 onCreate 方法,但仍然存在同样的问题。

protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         mQueue = MySingleton.getInstance(this).getRequestQueue();
         exampleList = new ArrayList<>();


         findViewById(R.id._button).setonClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 try {
                      my_func(exampleList);
                      buildrecyclerView();

                 } catch (Exception e) {
                     e.printstacktrace();
                 }
             }
         });

解决方法

您提到要在不单击按钮的情况下加载数据,并且将所有负责检索和显示数据的代码放在按钮的 OnClickListener 中。 如果您想在应用加载时显示数据,请从 OnClickListener 中取出所有代码。

在双击之前您不会看到数据,因为一旦您单击,数据检索就会异步启动,并且代码会继续运行并到达设置回收站视图。但尚未检索到数据。这就是 recyclerview 什么都不显示的原因。

在您随后单击该按钮时,数据检索完成,recyclerview 能够显示数据。

要修复它,我们需要等到数据被检索到。这可以通过多种方式实现。 一个快速解决方法是在 buildRecyclerView() 内的 try 块的最后一行调用您的 my_func() 函数。

,

要在不单击的情况下获取数据,请在单击侦听器之外调用方法。

    my_func(exampleList);

在 my_fun() 方法运行你的 buildRecyclerView() 之前; oncreate 中的方法。

然后在 try 块的最后一行通知 recyclerView 的适配器更新其中的数据。

,

只需在 onCreate 中调用您的方法。例如:

protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     mQueue = MySingleton.getInstance(this).getRequestQueue();
     exampleList = new ArrayList<>();
     
     thisIsMyFunction();
     }


public void thisIsMyFunction() {
     try {
          my_func(exampleList);
          buildRecyclerView();

     } catch (Exception e) {
          e.printStackTrace();
     }
     //you can add all the code you want to execute here
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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元字符(。)和普通点?