【问题标题】:Initialize SQL on app start in android在android中的应用程序启动时初始化SQL
【发布时间】:2018-12-29 00:24:58
【问题描述】:

我有一个名为 getdata 的 java 类,其中包含一些 SQL 代码,这些代码在另一个 java 类上显示为 listview,我的问题是每次我尝试查看数据时它会冻结一会儿然后显示数据,因为我从云数据库中获取数据。当我启动用户正忙于登录的应用程序并将数组保存在 ram 上时,是否有初始化此 SQL 代码以运行,以便在我尝试查看我的产品时应用程序不会滞后

这是我的getdata.java:

public class GetData {
Connection connect;
String ConnectionResult = "";
Boolean isSuccess = false;




public List<Map<String,String>> doInBackground() {

    List<Map<String, String>> data = null;
    data = new ArrayList<Map<String, String>>();
    try
    {
        ConnectionHelper conStr=new ConnectionHelper();
        connect =conStr.connectionclass();        // Connect to database
        if (connect == null)
        {
            ConnectionResult = "Check Your Internet Access!";
        }
        else
        {
            // Change below query according to your own database.
            String query = "select * from cc_rail";
            Statement stmt = connect.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            while (rs.next()){
                Map<String,String> datanum=new HashMap<String,String>();
                datanum.put("NAME",rs.getString("RAIL_NAME"));

                datanum.put("PRICE",rs.getString("RAIL_UNIT_PRICE"));

                datanum.put("RANGE",rs.getString("RAIL_RANGE"));

                datanum.put("SUPPLIER",rs.getString("RAIL_SUPPLIER"));

                datanum.put("SIZE",rs.getString("RAIL_SIZE"));
                data.add(datanum);
            }


            ConnectionResult = " successful";
            isSuccess=true;
            connect.close();
        }
    }
    catch (Exception ex)
    {
        isSuccess = false;
        ConnectionResult = ex.getMessage();
    }

    return data;
}

这是我的.java 文件,我在其中查看数据并发生延迟:

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_valance, container, false);

    list = (ListView)rootView.findViewById(R.id.raill);
    add = (Button)rootView.findViewById(R.id.btn_add);
    progressBar = (ProgressBar)rootView.findViewById(R.id.PB_Getting);
    progressBar.setVisibility(View.GONE);

    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getActivity(),Add_valance.class);
            startActivity(i);
        }
    });


          List<Map<String,String>> MyData = null;
            GetValence mydata =new GetValence();
            MyData= mydata.doInBackground();
            String[] fromwhere = { "NAME","PRICE","SIZE" ,"RANGE","SUPPLIER"};

            int[] viewswhere = {R.id.Name_txtView , R.id.price_txtView,R.id.size_txtView};

            ADAhere = new SimpleAdapter(getActivity(), MyData,R.layout.list_valence, fromwhere, viewswhere);

            list.setAdapter(ADAhere);

【问题讨论】:

  • 如果您尝试从主 thread 上的数据库获取数据,您可能会遇到延迟。如果你还没有的话,我会把它放在另一个线程中(即AsyncTask)。至于您的array,您可以调用该函数从您的onCreate 中的数据库中为您的主类下载数据。然后,或者将数组作为intent 中的extra 传递,或者将数组作为static 变量存储在另一个类中。让我知道这是否有帮助或您有任何问题。祝你好运。
  • @Jacob 在我的getdata 文件中,当我将它扩展到AsyncTask 时,如何使用一种抽象方法,因为我在getdata 文件中只有我的doinbackground
  • 扩展AsyncTask 的类应如下所示:ibb.co/kF9cid。 onPostExecute 方法是您要保存数组数据的位置。

标签: java android arrays azure azure-sql-database


【解决方案1】:

这就是我在 cmets 中所说的。

GetData.java:

public class GetData extends AsyncTask<String, Integer, Map<String, String>> {
    @Override
    protected Map<String, String> doInBackground(String... params) {
        //do your thing here
        return resultMap;
    }
    @Override
    protected void onPostExecute(Map<String, String> result) {
        StorageClass.setArrayData(result);
    }
}

StorageClass.java:

public class StorageClass {
    private static Map<String,String> arrayData = new HashMap<>();

    public static void setArrayData(Map<String,String> results){
        arrayData = results;
    }

    public static Map<String, String> getArrayData(){
        return arrayData;
    }
}

【讨论】:

  • 我的代码 List&lt;Map&lt;String, String&gt;&gt; data = null; 与映射不同,所以当我返回数据时它不兼容,我假设 return resultmap 与我的代码 return data 相同?我将如何修复列表
  • 如果您希望 AsyncTask 返回 List&lt;Map&lt;String, String&gt;&gt;,只需将我示例中的所有 Map&lt;String, String&gt; 实例更改为 List&lt;Map&lt;String, String&gt;&gt;。
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2019-09-06
  • 1970-01-01
相关资源
最近更新 更多