【发布时间】: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