我是新的 android 并找到了更新 UI 上的数据的最佳方法,并具有线程安全性以从服务器获取数据。
这是我从服务器 api 获取数据并更新 ListView 的代码,
但我认为这种方法可能会导致应用程序的性能下降。
我正在使用 okhttp 来调用服务器 api。
public String ActionAsyncGetTeamData(final String URL, final String token,final String expected_closure_date, final HTTPVerb verb, Activity activity) {
final String[] ResponseData = new String[1];
loading_complete=false;
_context = activity;
if (networkDetector.isNetworkAvailable()) {
new Thread(new Runnable() {
public void run() {
ResponseData[0] = GET(URL, token, expected_closure_date);
leadList.clear();
meetingList.clear();
taskList.clear();
TeamSyncModel teamSyncModel=json.fromJson(ResponseData[0],TeamSyncModel.class);
for (LeadModel leadModel: teamSyncModel.lead) {
leadList.add(leadModel);
}
for (MeetingModel meetingModel: teamSyncModel.meeting) {
meetingList.add(meetingModel);
}
for (TaskModel taskModel: teamSyncModel.task) {
taskList.add(taskModel);
}
loading_complete=true;
_context.runOnUiThread(new Runnable() {
@Override
public void run() {
Planner planner=new Planner();
planner.progress.setVisibility(View.GONE);
planner.list.setVisibility(View.VISIBLE);
planner.adapterTeam(_context);
planner.closure_header.requestFocus();
}
});
}
}).start();
return ResponseData[0];
}
else {
Planner planner=new Planner();
planner.progress.setVisibility(View.GONE);
planner.list.setVisibility(View.VISIBLE);
planner.adapterTeam(_context);
leadList.clear();
meetingList.clear();
taskList.clear();
loading_complete=true;
Toast.makeText(_context.getApplicationContext(), "Internet connection not available", Toast.LENGTH_SHORT).show();
}
return null;
}
从服务器获取数据
private String GET(String url, String token, String lastSync) {
client.setConnectTimeout(15, TimeUnit.MINUTES);
client.setReadTimeout(15, TimeUnit.MINUTES);
try {
Request request = new Request.Builder()
.url(url + lastSync)
.addHeader("x-access-token", token)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
} catch(Exception ex) {
ex.printStackTrace();
}
return null;
}
在 android 中执行此任务的正确方法
最佳答案
您尝试以下步骤
1 in UI create refer to listview, adapter and asyntask
2 from the ui send reference to adapter at the asyntask in this getData from server and in the method onPostExecute of the asynk call this method adapter.notifyDatasetChange();
3 in the adapter you manage the info what you give of the server in the asyntask
关于java - 是使用线程从服务器获取数据并更新 ListView 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33418646/