gpt4 book ai didi

java - 从 MySQL 下载 Android App 数据的有效方法

转载 作者:行者123 更新时间:2023-11-29 00:36:08 25 4
gpt4 key购买 nike

我只是想知道我的代码是否可以下载。我的应用程序需要从数据库中获取大量数据,因此快速下载至关重要。下载时间还可以,但我认为可以对其进行更高效的编程。你能看看这个吗?这个类下载了许多不同的公司,下载后它们被放入与其类别相对应的 HashMap 中。下载完此类后,返回一个包含多个 Hashmaps(类别)的 HashMap,并在这些 Hashmaps 中下载数据。不要介意实际的工作流程,但请专注于此类下载数据的方式。有没有办法更快地做到这一点?

public class CompanyDAO {

private static Controller delegate;
private static String companyUrl = "http:// URL HERE";

private Map<Object, Object> companyMap = new HashMap<Object, Object>();
private Map<String, Integer> pinMap = new HashMap<String, Integer>();


public CompanyDAO (Controller _delegate, Map<String, Integer> map) {
delegate = _delegate; //reference to controller
pinMap = map;

}

public void getCompanyData(ArrayList<Object> categoriesArray) {
for (int i = 0; i < categoriesArray.size(); i++) {
Map<String, Object> categoriesInMap = new HashMap<String, Object>();
//ArrayList<Object> categoriesInMapArray = new ArrayList<Object>();
companyMap.put(categoriesArray.get(i), categoriesInMap);
}
this.downloadCompanyData();
}

private void downloadCompanyData() {

companyUrl = companyUrl + delegate.ID;
try {
new DownloadCompanyData().execute(companyUrl).get(10000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private class DownloadCompanyData extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();

BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}

} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}

@SuppressWarnings("unchecked")
@Override
protected void onPostExecute(String result) {



JSONArray companyDataArray;

try {
companyDataArray = new JSONArray(result);

for(int i=0;i<companyDataArray.length();i++){
JSONObject id = companyDataArray.getJSONObject(i);
String catName = id.getString(Controller.CAT_NAME);

if (companyMap.get(catName) != null) {
Markers marker = new Markers(new LatLng(id.getDouble("latitude"), id.getDouble("longitude")), id.getString(Controller.CAT_NAME), id.getString(Controller.ID), id.getString(Controller.SUBSCRIPTION), pinMap.get(catName), id.getString(Controller.TITLE), id.getString(Controller.COMPANY_NAME), id.getString(Controller.WWW), id.getString(Controller.STREET), id.getString(Controller.HOUSE_NUMBER), id.getString(Controller.HOUSE_ADD));

((Map<String,Object>) companyMap.get(catName)).put(id.getString(Controller.TITLE), marker.markerInformationMap);

}

}
delegate.setCompanyHashMap(companyMap);

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}

最佳答案

我猜你错过了 AsyncTask 的重点

它应该完成 doInBackground() 中的所有工作然后使用 onPostExecute将其传送到 UI。

但是你正在做的是对 doInBackground 进行网络操作并在 onPostExecute 上进行数据解析.

此外,JSON 对象是需要进一步解析的原始数据。您应该在后台进行所有解析。例如,假设您的公司数据是地址、电话号码、规模和名称。你可以有一个这样的类(附注:我在没有测试的情况下写了所有这些,这里会有一点错误,但你会明白的):

 public class CompanyData{
private String name, address, phone;
private int size;
public CompanyData(JsonObject jo){
name = jo.getString("name");
address = jo.getString("address");
phone = jo.getString("phone");
size = jo.getInt("size");
}
// put a bunch of get methods here...
// getName(), getAddress(), etc.
}

然后在你的“protected Map doInBackground(String... urls)”上完成网络操作,创建 JsonArray,创建一个 Map<String,CompanyData> ,遍历数组创建 CompanyData 对象并将它们放入 map 并将 map 返回给您的 protected void onPostExecute(Map<String,CompanyData> result)在执行后,它只是将此结果传递给 UI。

快乐编码。

关于java - 从 MySQL 下载 Android App 数据的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14234502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com