【发布时间】:2015-04-27 12:27:47
【问题描述】:
我有 edittext 和 button 来插入数据,当我单击按钮时,我隐藏了 button 和 edittext 并显示 ProgressBar。我正在使用 AsyncTask 在 sqlite 数据库中插入数据,但问题是,在执行后台任务时, ProgressBar 没有动画。我正在使用带有 intermediateDrawable 的进度条。
注意:ProgressBar 在其他类中的动画效果很完美,但是当我在数据库中插入数据时,它会显示但没有动画效果。
进度条
<ProgressBar
android:id="@+id/pb"
android:visibility="gone"
android:layout_centerInParent="true"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/viewSpace3"
android:indeterminateDrawable="@drawable/loader_0_1" />
loader_0_1.xml
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape
android:innerRadiusRatio="3"
android:shape="oval"
android:thicknessRatio="8"
android:useLevel="false" >
<size
android:height="48dip"
android:width="48dip" />
<gradient
android:centerColor="#FFFFFF"
android:centerY="0.50"
android:endColor="#0B95B9"
android:startColor="#FFFFFF"
android:type="sweep"
android:useLevel="false" />
</shape>
在 AsyncTask 的 preExecute 中,我隐藏其他小部件并显示 progressBar pb,使用
在 doInBackground 中,我使用游标在数据库中插入数据
在 PostExecute 中,我隐藏了进度条并显示其他小部件
这是我的 AsyncTask 方法
private class SaveToDatabase extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
runOnUiThread(new Runnable() {
@Override
public void run() {
sLayout.setVisibility(View.GONE);
pb.setVisibility(View.VISIBLE);
}
});
}
@Override
protected String doInBackground(String... params) {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
mdb=new DBHandler(CustomCVG.this, DATABASE_NAME,null, DATABASE_VERSION);
db=mdb.getWritableDatabase();
db=mdb.getWritableDatabase();
for (int i = 0; i < adapter.getCount(); i++) {
ContentValues cv=new ContentValues();
cv.put("VIN", vin_z);
cv.put("rotate", rotateStringList.get(i));
db.insert("imageUploadDb", null, cv);
}
db.close();
startActivity(new Intent(getApplicationContext(), MGTActivity.class));
}
});
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
runOnUiThread(new Runnable() {
@Override
public void run() {
pb.setVisibility(View.GONE);
sLayout.setVisibility(View.VISIBLE);
}
});
}
}
这是一个内存或 RAM 问题,在使用数据库时不允许 progressBar 动画...?
【问题讨论】:
-
也发布异步任务代码。
-
发布从活动或任何你运行它的地方运行 asyncTask 代码。你有没有尝试过你的进度条动画?您可以使其可见并无需任何操作即可运行您的活动,因此它应该具有动画效果。
-
既然你很了解AsyncTask,我假设你使用
onProgressUpdate方法来制作进度条动画 -
我根本没有使用任何动画方法来制作动画。我只是让它可见。这就是@Stan
-
其实你使用的是自定义动画:
android:indeterminateDrawable="@drawable/loader_0_1"。好的,然后让它在活动的onCreate()中可见,看看它是否有动画。也可能整个 DB 作业执行得如此之快,以至于 PB 没有时间制作动画。 1-10 次插入执行得非常快。但是我建议你在循环内使用事务而不是你的 sql-inserts 方式。此外,您仍然没有展示如何实例化和运行 AsyncTask。
标签: android sqlite animation android-asynctask android-sqlite