AsyncTask实现问题

时间:2013-08-12 20:38:51

标签: android android-asynctask


有人可以帮我实现AsynkTask到这段代码吗?

我是Android新手,我真的不知道如何构建代码

public class DisplayActivity extends ListActivity {

private final String TAG="links";

private ArrayAdapter<String> mAdapter = null;
ArrayList<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;

String sites[]={"http://www.dn.pt/inicio",
        "http://www.expresso.sapo.pt","http://www.publico.pt/?fullsite=true"};



@SuppressLint( "NewApi")
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display);

    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    // Show the Up button in the action bar.
    //  getActionBar().setDisplayHomeAsUpEnabled(true);
    //}

    final Intent intent = getIntent();
    final String url_link =intent.getStringExtra(MainActivity.EXTRA_INPUTURL);
    final String keyword = intent.getStringExtra(MainActivity.EXTRA_INPUTKEY);


    mAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1);
    final ListView list=(ListView) findViewById(android.R.id.list);
    list.setAdapter(mAdapter);

    //get the juice
    keyword.toLowerCase();


    for(int i=0; i < sites.length;i++){
        Elements elem= getHtmlCode(sites[i]);
        for(Element link:elem){
            if(/*link.absUrl(sites[i]).contains(link.attr("abs:href")) &&*/ link.text().toLowerCase().contains(keyword)){
                    mAdapter.add(link.text() + ": " + link.attr("abs:href")); 
                    mAdapter.notifyDataSetChanged();
            }
        }
    }
}


private Elements getHtmlCode(String url) {
    try {
        if (!url.startsWith("http://") && !url.startsWith("https://"))
            url = "http://" + url;

        Document doc = Jsoup.connect(url).get();
        Elements content=doc.select("a[href]");
        return content;
    } 
    catch (IOException e) {

        // Never e.printStackTrace(), it cuts off after some lines and you'll
        // lose information that's very useful for debugging. Always use proper
        // logging, like Android's Log class, check out
        // http://developer.android.com/tools/debugging/debugging-log.html
        Log.e(TAG, "Failed to load HTML code", e);
        // Also tell the user that something went wrong (keep it simple,
        // no stacktraces):

        Toast.makeText(this, "Failed to load HTML code",
                Toast.LENGTH_SHORT).show(); 
    }
    return null;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        // This ID represents the Home or Up button. In the case of this
        // activity, the Up button is shown. Use NavUtils to allow users
        // to navigate up one level in the application structure. For
        // more details, see the Navigation pattern on Android Design:
        //
        // http://developer.android.com/design/patterns/navigation.html#up-vs-back
        //
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

1 个答案:

答案 0 :(得分:1)

这个主题有很多documentation。你可以试试这样的东西

   private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
        protected void onPreExecute (){
            dialog = ProgressDialog.show(YourActivity.this ,"title","message");
        }

         protected void doInBackground(URL... urls) {
            //Add the function that you want to call in an async task here
            for(int i=0; i < urls.length;i++){
                Elements elem= getHtmlCode(urls[i]);
                for(Element link:elem){
                    if(/*link.absUrl(sites[i]).contains(link.attr("abs:href")) &&*/ link.text().toLowerCase().contains(keyword)){
                            mAdapter.add(link.text() + ": " + link.attr("abs:href")); 
                            mAdapter.notifyDataSetChanged();
                    }
                }
            }
         }


         protected void onPostExecute(Long result) {
            dialog.dismiss();
         }
     }

然后你可以通过以下方式从任何地方打电话:

new DownloadFilesTask().execute(url1, url2, url3);