Android - Jsoup: How to get RESULT from Jsoup.connect(“url”).get() from AsyncTask

青春壹個敷衍的年華 提交于 2019-12-25 18:42:52

问题


I want to get DOCUMENT which return Jsoup.connect("url").get() from AsyncTask, can i to return it? I just want to create class which will be to help me to get data from some url ))

Activity class:

        @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = (ListView) findViewById(R.id.listView1);

        try {
            doc = new GetDataFromUrl(this).execute(functions_list).get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }




    }

and AsyncTask extend class code :

package com.example.PACKAGENAME;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;

public class GetDataFromUrl extends AsyncTask<String, Void, Document> {

    Context mContext;
    ProgressDialog pdialog;

    public GetDataFromUrl(Context context) {
        mContext = context;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pdialog = new ProgressDialog(mContext);
        pdialog.setTitle(R.string.loading);
        pdialog.setCancelable(false);
        pdialog.show();
    }

    @Override
    protected Document doInBackground(String... data) {

        try {
            Document doc = Jsoup.connect(data[0]).get();
            return doc;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Document result) {
        if (result != null) {
            super.onPostExecute(result);
            pdialog.cancel();
        }
        else
            Toast.makeText(mContext, "NULL ASYNC", Toast.LENGTH_LONG).show();

    }

}

回答1:


no you just need to create interface

TaskCompleteListner.java

public Interface TaskCompleteListner{

 void onTaskComplete(String result);
}

YourActivity.java

public Class YourActivity extends Activity implements TaskCompleteListner
{

      @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = (ListView) findViewById(R.id.listView1);

        try {
            doc = new GetDataFromUrl(this).execute(functions_list).get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }




    }
  @override
  void onTaskComplete(String result)
  {

      //your result will be here in result variable
  }

}

GetDataFromUrl.java

mport java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;

public class GetDataFromUrl extends AsyncTask<String, Void, Document> {

    Context mContext;
    ProgressDialog pdialog;
    TaskCompleteListner taskCompleteListener; 
    public GetDataFromUrl(Context context) {
        mContext = context;
        taskCompleteListener=(TaskCompleteListner)context;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pdialog = new ProgressDialog(mContext);
        pdialog.setTitle(R.string.loading);
        pdialog.setCancelable(false);
        pdialog.show();
    }

    @Override
    protected Document doInBackground(String... data) {

        try {
            Document doc = Jsoup.connect(data[0]).get();
            return doc;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Document result) {
        pdialog.cancel();
        if (result != null) {

              taskCompleteListener.OnTaskComplete(result);
        }
        else
            Toast.makeText(mContext, "NULL ASYNC", Toast.LENGTH_LONG).show();

    }

}


来源:https://stackoverflow.com/questions/19751903/android-jsoup-how-to-get-result-from-jsoup-connecturl-get-from-asynctas

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!