在 Android 中将线程转换为异步任务
Converting Thread to an Async task in Android
我的 UI 中有一个连续的产品列表及其各自的值。
Product1 --- 10
Product2 --- 12
. . . . . . . . and so on
。
可以单击每一行,然后打开一个新的自定义对话框界面,用户可以在其中更改值和设置新值。问题是当我更改值并关闭对话框时,行中的值没有更新。我必须打开对话框并再次关闭它,然后它才会更新。它总是更新 "previous" 值。例如,如果我将 Product1 从 10 更改为 12,然后再次打开对话框并将其更改为 13,它会更新为“12”。我在单独的实用程序方法中使用线程。我想将我的 Thread 实现转换为异步任务并在 onPostExecute 的后台使用它。我怎样才能做到这一点?
static void saveMutation(final String productId,
final int mutationAmount,
final boolean isOpeningStock,
final String flightKey,
final FlightLegIdentifier fli,
final String crew, final String tabletId,
final AirFiApplication airFiApplication) {
new Thread(new Runnable() {
@Override
public void run() {
StockMutation mutation = new StockMutation();
mutation.setOpeningStock(isOpeningStock);
mutation.setFlightKey(flightKey);
mutation.setFli(fli);
mutation.setProductId(productId);
mutation.setCrew(crew);
mutation.setMutationId(String.valueOf(UUID.randomUUID()));
mutation.setTabletId(tabletId);
mutation.setMutationAmount(mutationAmount);
StockMutationDao dao = new StockMutationDao(SHARD_DB);
dao.createOrUpdate(mutation);
StockUtils.adjustStock(flightKey, fli, airFiApplication);
StockUtils.setIsStockChanged(true);
}
}).start();
}
问题是 UI 只能在 UI(主)线程上更新。您可以使用 Handler 或 runOnUIThread() 从非 UI 线程更新 UI 线程。
您可以在 google.
上找到很多资源
我的 UI 中有一个连续的产品列表及其各自的值。
Product1 --- 10
Product2 --- 12
. . . . . . . . and so on
。 可以单击每一行,然后打开一个新的自定义对话框界面,用户可以在其中更改值和设置新值。问题是当我更改值并关闭对话框时,行中的值没有更新。我必须打开对话框并再次关闭它,然后它才会更新。它总是更新 "previous" 值。例如,如果我将 Product1 从 10 更改为 12,然后再次打开对话框并将其更改为 13,它会更新为“12”。我在单独的实用程序方法中使用线程。我想将我的 Thread 实现转换为异步任务并在 onPostExecute 的后台使用它。我怎样才能做到这一点?
static void saveMutation(final String productId,
final int mutationAmount,
final boolean isOpeningStock,
final String flightKey,
final FlightLegIdentifier fli,
final String crew, final String tabletId,
final AirFiApplication airFiApplication) {
new Thread(new Runnable() {
@Override
public void run() {
StockMutation mutation = new StockMutation();
mutation.setOpeningStock(isOpeningStock);
mutation.setFlightKey(flightKey);
mutation.setFli(fli);
mutation.setProductId(productId);
mutation.setCrew(crew);
mutation.setMutationId(String.valueOf(UUID.randomUUID()));
mutation.setTabletId(tabletId);
mutation.setMutationAmount(mutationAmount);
StockMutationDao dao = new StockMutationDao(SHARD_DB);
dao.createOrUpdate(mutation);
StockUtils.adjustStock(flightKey, fli, airFiApplication);
StockUtils.setIsStockChanged(true);
}
}).start();
}
问题是 UI 只能在 UI(主)线程上更新。您可以使用 Handler 或 runOnUIThread() 从非 UI 线程更新 UI 线程。 您可以在 google.
上找到很多资源