0
앱이 처음 실행될 때 데이터베이스에 데이터를 삽입하려고 했으므로 진행률 막대와 스레드를 만들었지 만 스레드가 실행되지 않고 진행률이 계속 유지되는 것처럼 보입니다. 보여주는 것은 사람이 설명 할 수있는 이유를 들으안드로이드 스레드가 실행되고 있지 않습니다.
내 코드 :
public class HDtvs extends Activity implements Runnable {
/** Called when the activity is first created. */
private Button likebutton;
private ImageButton about;
private ChannelDB mDB;
private ListView channellist;
private Cursor c;
private ProgressDialog d;
private String channelS_TABLE;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
likebutton=(Button) findViewById(R.id.share);
about =(ImageButton)findViewById(R.id.about);
channellist = (ListView) findViewById(R.id.Channel);
if (tabIsExist(channelS_TABLE) != true){
d=new ProgressDialog(HDtvs.this);
d.setMessage("由于您第一次使用,本程序正在创建数据库,请稍后···");
d.show();
/* 启动另一个Thread,运行run() */
Thread thread = new Thread(HDtvs.this);
thread.start();
}else{
filldata();
Log.d(this.toString(),"database exist");
}
}
public void filldata(){
mDB = new ChannelDB(this);
String[] columns = {mDB.KEY_ID, mDB.KEY_POSTER, mDB.KEY_CHANNEL, mDB.KEY_PATH, mDB.KEY_DBLINK};
String table = mDB.channelS_TABLE;
c = mDB.getHandle().query(table, columns, null, null, null, null, null);
startManagingCursor(c);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.channelview,
c,
new String[] {mDB.KEY_POSTER, mDB.KEY_CHANNEL, mDB.KEY_DBLINK},
new int[] {R.id.poster, R.id.channel, R.id.douban});
adapter.setViewBinder(new ChannelViewBinder());
channellist.setAdapter(adapter);
channellist.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
c.moveToPosition(position);
Intent intent = new Intent();
intent.setClass(HDtvs.this,Showlist.class);
Bundle bunde = new Bundle();
bunde.putString("path",mDB.KEY_PATH);
bunde.putString("cname",mDB.KEY_CHANNEL);
bunde.putString("dblink",mDB.KEY_DBLINK);
/* 将Bundle对象assign给Intent */
intent.putExtras(bunde);
startActivity(intent);
}
});
}
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
d.dismiss();
}
};
@Override
public void run()
{
try
{
mDB.Reset();
insert some data
handler.sendEmptyMessage(0);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
대답은 매우 고무적입니다. 이전에 Asynctask를 시도했지만 나중에 asynctask가 실행될 때 화면이 검게 보이고 아무 것도 보이지 않기 때문에 좋지 않습니다. 해결할 아이디어가 없습니다. 그? – oratis
Coz 지금이 스플래시 화면에이 절차를 적용하고 있으며 더 사용자 친화적 인 스플래시가 필요하지만이 asynctask, plz 도움말, thx를 사용한 후에 스플래시 이미지가 표시되지 않습니다. – oratis
onCreate-Method에서 SplashScreen을 실행 한 다음 AsyncTask를 실행하십시오. onPostExecute에서 다음 활동의 의도를 시작할 수 있습니다. – Thommy