android线程未运行

android线程未运行,android,Android,如果应用程序是第一次运行,我试图向数据库中插入一些数据,因此我创建了一个progressbar和一个线程来执行此操作,但是线程似乎没有运行,progressbar只是一直显示,有人能解释为什么吗,thx 我的代码: public class HDtvs extends Activity implements Runnable { /** Called when the activity is first created. */ private Button likebutton

如果应用程序是第一次运行,我试图向数据库中插入一些数据,因此我创建了一个progressbar和一个线程来执行此操作,但是线程似乎没有运行,progressbar只是一直显示,有人能解释为什么吗,thx

我的代码:

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();
      }
    }

 } 
公共类HDTV扩展活动实现可运行{
/**在首次创建活动时调用*/
私人按钮式按钮;
私人图像按钮关于;
专用信道数据库;
私有ListView频道列表;
专用游标c;
私人发展;
专用字符串通道_表;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
likebutton=(按钮)findViewById(R.id.share);
about=(ImageButton)findViewById(R.id.about);
channellist=(ListView)findViewById(R.id.Channel);
if(tabIsExist(通道表)!=true){
d=新进度对话框(HDTV.this);
d、 设置消息(“由于您第一次使用,本程序正在创建数据库,请稍后···");
d、 show();
/* 启动另一个线运行运行()*/
线程=新线程(HDtvs.this);
thread.start();
}否则{
filldata();
Log.d(this.toString(),“数据库存在”);
}
}
公共数据(){
mDB=新通道DB(本);
String[]columns={mDB.KEY\u ID,mDB.KEY\u POSTER,mDB.KEY\u CHANNEL,mDB.KEY\u PATH,mDB.KEY\u DBLINK};
String table=mDB.channelS\u table;
c=mDB.getHandle().query(表、列、null、null、null、null、null);
开始管理光标(c);
SimpleCrsorAdapter=新的SimpleCrsorAdapter(此,
R.layout.channelview,
C
新字符串[]{mDB.KEY_POSTER,mDB.KEY_CHANNEL,mDB.KEY_DBLINK},
新int[]{R.id.poster,R.id.channel,R.id.douban});
setViewBinder(新的ChannelViewBinder());
channellist.setAdapter(适配器);
channellist.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
c、 移动位置(位置);
意图=新意图();
setClass(HDtvs.this,Showlist.class);
Bundle bunde=新Bundle();
bunde.putString(“路径”,mDB.KEY_路径);
bunde.putString(“cname”,mDB.KEY_频道);
bunde.putString(“dblink”,mDB.KEY_dblink);
/* 将捆对象分配给意图*/
意向.临时拨款(邦德);
星触觉(意向);
}
}); 
}
私有处理程序=新处理程序()
{
@凌驾
公共无效handleMessage(消息消息消息)
{ 
d、 解雇();
}
};
@凌驾
公开募捐
{
尝试
{
mDB.Reset();
插入一些数据
handler.sendEmptyMessage(0);
}
捕获(例外e)
{
e、 printStackTrace();
}
}
} 

使用AsyncTask更容易: 创建从AsyncTask扩展的新内部类:

  private class MyTask extends AsyncTask<String, String, String> {...
私有类MyTask扩展了AsyncTask{。。。
在AsyncTask方法
doInBackground
中,您可以放置数据库代码

只需使用
new MyTask().execute();
启动异步任务,例如onCreate。
如果你想要一个ProgressBar,你需要看看
onPreExecute、onPostExecute和onProgressUpdate
方法。

你的答案非常鼓舞人心,我以前试过Asynctask,但后来放弃了,因为当Asynctask运行时,屏幕是黑色的,根本没有显示任何内容,我认为这不好。有什么想法吗要解决这个问题吗?因为我现在把这个过程放在我的启动屏幕上,我希望有一个更友好的启动,但是启动图像在我使用这个asynctask后不会显示,请帮助,thxSure:只需用onCreate方法构建您的启动屏幕,然后执行您的asynctask。在onPostExecute中,您可以激发下一个启动的意图Activity.Thx,伙计。但是在初始屏幕之后和主活动之前,我仍然会看到一个奇怪的黑屏。我在这里发布了我的代码,也许你想帮我检查一下。Thx我不明白为什么你在onCreate方法中有这个线程。你所要做的就是在onCreate中启动AsyncTask,在onPostExecute中启动新活动。正在异步任务中等待:已同步(this){wait(2000);}