Java 可调用不';I don’我不会从课堂上归还任何东西
我正在做一个应用程序,刮取一个网站,获取一些图片,效果很好,我创建了一个ThreadPoolExecutor和一些callable,但是当我试图从我创建的callable中获取结果时,我无法命名,它会进入ExecutionException 这是刮板类:Java 可调用不';I don’我不会从课堂上归还任何东西,java,android,callable,executor,Java,Android,Callable,Executor,我正在做一个应用程序,刮取一个网站,获取一些图片,效果很好,我创建了一个ThreadPoolExecutor和一些callable,但是当我试图从我创建的callable中获取结果时,我无法命名,它会进入ExecutionException 这是刮板类: public class ImageScraper implements Callable<String>{ Context context = null; public Logo logoActivity; Document[]
public class ImageScraper implements Callable<String>{
Context context = null;
public Logo logoActivity;
Document[] doc = new Document[1];
List<ImageObject> imageList = new ArrayList<ImageObject>();
int pagAnterior;
String url;
int pag;
public ImageScraper(Logo act, String url, int pag, int pagAnterior) {
this.logoActivity = act;
this.url = url;
this.pag = pag;
this.pagAnterior = pagAnterior;
context = act.getApplication();
}
@Override
public String call() throws Exception {
getResponse(url,pag);
getImages(doc[0]);
Log.i("listaaa", "listaa : "+imageList.size());
String something = "got something";
return something;
}
public void getImages(Document docfinal) {
Log.i("Documento1", "documento1 : "+docfinal);
Elements entradas = docfinal.select("img[src]");
Elements titulo = doc[0].select("title");
String tituloPagina = titulo.text();
String urlImage = "";
if(!tituloPagina.toLowerCase().contains("page "+pagAnterior)) {
for (Element elem : entradas) {
if (elem.attr("abs:src").toLowerCase().contains("mfiles")) {
urlImage = elem.attr("abs:src").replace("thumb-", "");
Log.i("GridVerticalFragment", "Pillando url: " + urlImage);
ImageObject image = new ImageObject(urlImage);
Log.i("GridVerticalFragment", "Url Pillada: " + image.getUrl());
imageList.add(image);
}
}
}
Log.i("Logo", "Lista2: "+imageList.size());
}
public void getResponse(String urlRoot, int pagina) {
Log.i("GridVerticalLayaout", "Pagina: "+pagina);
String url;
String urlFinal = "";
if(pagina==0){
url = urlRoot;
urlFinal = url;
}else{
url = urlRoot.concat("?page="+Integer.toString(pagina));
urlFinal = url;
}
RequestQueue rq = Volley.newRequestQueue(context);
Log.i("GridVerticalLayaout", "fuuck: "+url);
Log.i("GridVerticalLayaout", "lool: "+urlFinal);
StringRequest stringRequest = new StringRequest(Request.Method.GET, urlFinal,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Do something with the response
doc[0] = Jsoup.parse(response);
getImages(doc[0]);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Handle error
Log.e("ERROR", "Error occurred ", error);
}
});
rq.add(stringRequest );
}
}
公共类ImageScraper实现可调用{
Context=null;
公共标志标识活动;
单据[]单据=新单据[1];
List imageList=新建ArrayList();
内特-帕格前路;
字符串url;
int-pag;
公共图像刮板(徽标行为、字符串url、int-pag、int-pag){
这个活动=行动;
this.url=url;
this.pag=pag;
this.pagperior=pagperior;
context=act.getApplication();
}
@凌驾
公共字符串调用()引发异常{
getResponse(url,pag);
getImages(文档[0]);
Log.i(“listaaa”、“listaa:+imageList.size());
String something=“got something”;
归还某物;
}
public void getImages(文档docfinal){
Log.i(“Documento1”、“Documento1:+docfinal”);
元素entradas=docfinal.select(“img[src]”);
元素titulo=doc[0]。选择(“标题”);
字符串tituloPagina=titulo.text();
字符串urlImage=“”;
如果(!tituloPagina.toLowerCase().包含(“第页”+pag页)){
对于(元素元素:entradas){
if(elem.attr(“abs:src”).toLowerCase()包含(“mfiles”)){
urlImage=elem.attr(“abs:src”).replace(“thumb-”,“”);
Log.i(“GridVerticalFragment”,“Pillando url:+urlImage”);
ImageObject image=新的ImageObject(urlImage);
Log.i(“GridVerticalFragment”,“Url Pillada:”+image.getUrl());
添加(图像);
}
}
}
Log.i(“Logo”,“Lista2:”+imageList.size());
}
public void getResponse(字符串urlRoot,int pagina){
Log.i(“GridVerticallayout”,“Pagina:+Pagina”);
字符串url;
字符串urlFinal=“”;
如果(pagina==0){
url=urlRoot;
urlFinal=url;
}否则{
url=urlRoot.concat(“?page=“+Integer.toString(pagina));
urlFinal=url;
}
RequestQueue rq=Volley.newRequestQueue(上下文);
Log.i(“GridVerticallayout”,“fuuck:+url”);
Log.i(“GridVerticallayout”,“lool:+urlFinal”);
StringRequest StringRequest=新的StringRequest(Request.Method.GET,urlFinal,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//对回应做点什么
doc[0]=Jsoup.parse(响应);
getImages(文档[0]);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//处理错误
Log.e(“错误”,“发生错误”,错误);
}
});
rq.add(请求);
}
}
这是主要课程:
public class Logo extends AppCompatActivity {
public List<ImageObject> GlobalImageList = new ArrayList<ImageObject>() ;
Document[] doc = new Document[1];
String url;
int pagAnterior = 0;
int i = 0;
Context context = null;
public ThreadPoolExecutor executor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logo);
getSupportActionBar().hide();
Collection<Callable<String>> callableList = new ArrayList<>();
context = getApplication();
int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors();
executor = new ThreadPoolExecutor(
NUMBER_OF_CORES*2,
NUMBER_OF_CORES*2,
60L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>()
);
while(i<4){
callableList.add(new ImageScraper(this,"www.google.es,i,i-1););
i++;
}
List<Future<String>> result = null;
try {
result = executor.invokeAll(callableList);
} catch (InterruptedException e) {
Log.i("Fallo", "Fallo");
e.printStackTrace();
}
for (Future a : result) {
String SingleImageList = null;
try {
SingleImageList = (String) a.get();
Log.i("Single", "Single"+SingleImageList);
} catch (InterruptedException e) {
Log.i("Fallo3", "Fallo3");
e.printStackTrace();
} catch (ExecutionException e) {
Log.i("Fallo2", "Fallo2");
e.printStackTrace();
}
}
}
}
公共类徽标扩展了AppCompative活动{
public List GlobalImageList=new ArrayList();
单据[]单据=新单据[1];
字符串url;
int=0;
int i=0;
Context=null;
公共线程池执行器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_徽标);
getSupportActionBar().hide();
Collection callableList=new ArrayList();
context=getApplication();
int NUMBER_OF_CORES=Runtime.getRuntime().AvailableProcessor();
executor=新线程池executor(
_芯数*2,
_芯数*2,
60L,
时间单位:秒,
新建LinkedBlockingQueue()
);
而(i请检查这行代码
while(i<4){
callableList.add(new ImageScraper(this,"www.google.es,i,i-1););
i++;
}
while(i)
while(i<4){
callableList.add(new Callable<String>() {
public String call() throws Exception {
return "haha";
}
});
i++;
}
while(i<4){
callableList.add(new ImageScraper(this,"www.google.es,i,i-1););
i++;
}
while(i<4){
callableList.add(new ImageScraper(this,"www.google.es",i,i-1););
i++;
}