2017-03-19 22 views
0
package utils; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

@Service 
public class Urlpicture { 

    public String get_main_url(int num) { 
     String jpgurl = null; 
    try{ 
     String url = "https://www.zigbang.com/items1/"+num; 
     jpgurl = "http://z1.zigbang.com/items/7697786/538ec7a16033f0c32eac29ac50deb04a1e6bf3ba.jpg?h=800&q=60"; 
     Document doc = Jsoup.connect(url).get(); // this part require try catch 
     jpgurl = doc.select("img[src$=.jpg?h=800&q=60]").get(0).absUrl("src"); 



     System.out.println(url); 
     System.out.println(jpgurl); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return jpgurl; 




    } 


} 

從Jsoup Connect獲取文檔。 但是,如果Jsoup.connect提供了一個錯誤。我想 jgurl作爲別的東西,並繼續運行代碼。 是不可能的? (此代碼將稱爲多的時間從外部,但如果出現異常。它停止)如果忽略發生返回別的東西?

外源調用此urlpicture

@RequestMapping("/search") 
    public ModelAndView searchHandler() throws JsonProcessingException { 
     ModelAndView mav = new ModelAndView("t_search"); 

     List<HashMap<String, Object>> mlist = rd.test_room(); 


//===================================================== 
     List<String> urlcol = new ArrayList<>(); 
      JSONArray json_arr=new JSONArray();// 
      for (Map<String, Object> map : mlist) { 
       JSONObject json_obj=new JSONObject(); 
       String url = null; 
       System.out.println(map.get("SELL_NUM")); 
       int num = Integer.parseInt(map.get("SELL_NUM")+""); 
       String str = (urp.get_main_url(num).toString());// this calling the function 
       System.out.println(str); 
     } 
        urlcol.add(url); 
       for (Map.Entry<String, Object> entry : map.entrySet()) { 
        String key = entry.getKey(); 

        Object value = entry.getValue(); 


        try { 

         json_obj.put(key,value); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }       
       } 
       (json_arr).put(json_obj); 

      } 

=============== ============================================修復後

@RequestMapping("/search") 
    public ModelAndView searchHandler() throws JsonProcessingException { 
     ModelAndView mav = new ModelAndView("t_search"); 

     List<HashMap<String, Object>> mlist = rd.test_room(); 



     List<String> urlcol = new ArrayList<>(); 
      JSONArray json_arr=new JSONArray(); 
      for (Map<String, Object> map : mlist) { 
       JSONObject json_obj=new JSONObject(); 
       String url = null; 
       String input = null; 
       System.out.println(map.get("SELL_NUM")); 
       int num = 0; 
       num = Integer.parseInt(map.get("SELL_NUM")+""); 
       input = "https://www.zigbang.com/items1/"+num; 
       System.out.println(input); 

       try{ 
       url= (urp.get_main_url(input)); 
       System.out.println(url); 

       }catch(Exception e){ 
        System.out.println("No="); 
        e.printStackTrace(); 
        url = "http://z1.zigbang.com/items/7697786/538ec7a16033f0c32eac29ac50deb04a1e6bf3ba.jpg?h=800&q=60"; 

}

@Service 
public class Urlpicture { 

    public String get_main_url(String url) { 
     Document doc; 
     String jpgurl = null; 
    try{ 

     jpgurl = "http://z1.zigbang.com/items/7697786/538ec7a16033f0c32eac29ac50deb04a1e6bf3ba.jpg?h=800&q=60"; 
     jpgurl = Jsoup.connect(url).get().select("img[src$=.jpg?h=800&q=60]").get(0).absUrl("src"); 


    }catch(Exception e){ 
     e.printStackTrace(); 

    }finally{ 

     return jpgurl; 
    } 

================================================== =================== 修復後,它會在異常後繼續運行。 但即使url鏈接存在與有效數字 它將返回所有值作爲例外。

7666495 
https://www.zigbang.com/items1/7666495// this link is valid but throw exception 
No= 
java.lang.NullPointerException 
    at controller.main_controller.searchHandler(main_controller.java:54) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springf 

我不知道爲什麼這樣保持拋出異常的所有值

+1

從try段移動jgurl的聲明,否則它的作用域僅限於它,它不能在catch中被訪問。你可以在嘗試之前聲明它,給它默認值(錯誤消息),如果try部分將被執行沒有問題,它也會將jgurl更新爲適當的值。 – Pshemo

+0

我改變了我的代碼。 –

+0

@manjoojo不改變你的代碼,如果它改變你的問題 – QBrute

回答

1

問題是與你的jgurl變量,你需要按如下所示try塊之前申報的範圍。

此外,爲了解決第二個問題,你需要下載圖像的邏輯解壓縮到一個單獨的方法,並使用默認num當沒有找到指定num,這也是下面顯示的圖像再次調用它:

public String get_main_url(int num) { 
     int num = 7453201; 
     String jpgurl = null; 
     try { 
      downloadImage(num); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      num=0;//set the default value for which img exists 
      downloadImage(num);//call downloadImage with default num 
     } 
    } 

private String downloadImage(int num) { 
    String url = "https://www.zigbang.com/items1/"+num; 
    System.out.println(url); 
    Document doc = Jsoup.connect(url).get(); 
    jpgurl = doc.select("img[src$=.jpg?h=800&q=60]").get(0).absUrl("src"); 
    System.out.println(i + "="+jpgurl); 
} 
+0

現在有什麼問題,你能解釋一下嗎? – developer

+0

好,所以這個get_main_url()函數從外部調用。我正在輸入多個號碼並從某些網頁獲取jpg –

+0

您是否可以添加「外部」(調用者)代碼? – developer

相關問題