2012-08-10 82 views
1

我做了这个活动,任务没有开始。我调试它,并onStart()去task.execute()线,但它永远不会进入doInBackground()。在正在运行的任务列表中有一个AsyncTask,我认为这是一个。我看不出问题在哪里。这是代码。活动不执行任务

package pl.edu.elka.pw.hosewski.wifi; 

public class NetDetail extends Activity implements OnClickListener{ 

private LineGraph lgNet; 
private WifiManager wifi; 
private WiFiDetail net; 
private DBSource dbs; 
private DBWifi dbw; 
private TextView ssid; 
private TextView bssid; 
private TextView freq; 
private TextView capab; 
private SharedPreferences getPrefs; 
private int interval; 
private LineRefresh task; 
private ViewSwitcher psSwitch; 
private Button bSwitch; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.netdetail); 
    dbs = new DBSource(this); 
    dbs.open(); 
    getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); 
    psSwitch = (ViewSwitcher) findViewById(R.id.psSwitch); 
    bSwitch = (Button) findViewById(R.id.bSwitch); 
    lgNet = (LineGraph) findViewById(R.id.lgNet); 
    lgNet.setClickable(true); 
    lgNet.setOnClickListener(this); 
    bSwitch.setOnClickListener(this); 
    Bundle b = getIntent().getExtras(); 
    long i = b.getLong("index"); 
    dbw = dbs.getWifi(i); 
    net = WiFiList.getDetailByBSSID(dbw.getBssid()); 
    lgNet.setDetail(net); 
    ssid = (TextView) findViewById(R.id.tvSSID); 
    bssid = (TextView) findViewById(R.id.tvBSSID); 
    freq = (TextView) findViewById(R.id.tvFrequen); 
    capab = (TextView) findViewById(R.id.tvCapab); 
    ssid.setText(dbw.getSsid()); 
    bssid.setText(dbw.getBssid()); 
    freq.setText(dbw.getFrequency() + " MHz"); 
    capab.setText(dbw.getCapability()); 
    this.setTitle(dbw.getSsid()+ " - detale"); 
    interval = Integer.parseInt(getPrefs.getString("intervals", "5")); 
    task = new LineRefresh(); 
} 


class LineRefresh extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     // TODO Auto-generated method stub 
     super.onProgressUpdate(values); 
     updLines(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     while(wifi.isWifiEnabled()){ 
      publishProgress(); 
      try { 
       Thread.sleep(interval); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      if(isCancelled()){ 
       break; 
      } 
     } 
     return null; 
    } 

} 

public void updLines(){ 
    lgNet.setDetail(net); 
    lgNet.postInvalidate(); 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    dbs.close(); 
    task.cancel(true); 
} 


@Override 
protected void onStart() { 
    // TODO Auto-generated method stub 
    super.onStart(); 
    task.execute(); 
} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()){ 
    case R.id.lgNet: 
     psSwitch.showNext(); 
     break; 
    case R.id.bSwitch: 
     psSwitch.showPrevious(); 
     break; 
    } 
} 
} 
+0

如果在doInBackground方法中放置日志语句,会发生什么情况? – Krylez 2012-08-10 22:33:27

+0

'net'永远不会更新。它始终设置旧的旧值。 – zapl 2012-08-10 22:48:59

+0

Krylez:仍然没有 – hubert 2012-08-11 08:10:39

回答

0

task = new LineRefresh()之后,加上​​。您可能需要也可能不需要“null”参数,请参阅Eclipse告诉您的内容。

+0

掀起一个错误 – hubert 2012-08-11 07:56:55

+0

我检查了任务的状态,如果它有助于找到解决方案,它将返回RUNNING。 – hubert 2012-08-11 17:56:13