2012-12-05 78 views
1

我試圖從維基百科檢索文本以在Android應用程序上使用。我正在使用Java。 我想要做的第一件事就是從特定文章中檢索這些部分,並將它們展示給用戶,當用戶單擊某個部分時,使用另一個http請求獲取部分文本。將Json轉換爲特定的類

所以,這兩個要求是這些:

http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=sections

,然後這一個:

http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=text&section=1

我的問題是:什麼樣的java對象應該我創建存儲信息,然後使用.fromJSON()將其轉換爲這些類別?

感謝@NathanZ,我創建了這兩個類:

public class WikiResponseSections { 
    String title; 
    List<Section> sections; 
} 

public class Section { 
     int toclevel; 
     String level; 
     String line; 
     String number; 
     String index; 
     String fromtitle; 
     int byteoffset; 
     String anchor; 
} 

但是,當我轉換到這些OBJETS由GSON HTTP響應,並嘗試讀取域「標題」的價值有一個錯誤觸發器:JavaNullPointerException。 這裏是我的轉換代碼:

InputStream stream = null; 
try { 
    stream = entity.getContent(); 
} catch (IllegalStateException e) { 
    Log.e("Stream","ERROR illegalstateexception"); 
} catch (IOException e) { 
    Log.e("Stream","ERROR exception"); 
} 
reader = new BufferedReader(new InputStreamReader(stream)); 
GsonBuilder bldr = new GsonBuilder(); 
Gson gson = bldr.create(); 
WikiResponse = gson.fromJson(reader, WikiResponseSections.class); 
if (WikiResponse != null){ 
    Log.i("WikiResponse",WikiResponse.getTitle()); //The error triggers HERE 
    publishProgress(); 
} 
else 
    Log.i("WikiResponse","NULL"); 
} 

感謝您的幫助再次

回答

0

可以使用Google's Gson庫。 它的工作原理是這樣的:

InputStream source = ...; // your code to get the Json from a url 
Gson gson = new Gson(); 
Reader reader = new InputStreamReader(source); 
MyResponse response = gson.fromJson(reader, MyResponse.class); 

哪裏MyResponse是你的對象。當您創建MyResponse,給你的域相同的名稱和類型將JSON的領域

MyResponse類可以如下:

public class MyResponse{ 
    String title; 
    ArrayList<sections>; 
} 

public class sections{ 
    int toclevel; 
    String level; 
    String line; 
    String number; 
    String fromtitle; 
    long byteoffset; 
    String anchor; 
} 



public class WikiResponseParse{ 
    Parse parse; 
    public class Parse{ 
     String title, text; 
    } 
} 

如果你不能使用JSON字段名稱,因爲它不符合Java :

添加以下導入:

import com.google.gson.annotations.SerializedName; 

和類:

@SerializedName("*") 
public String star; 
+0

謝謝,但是,第二個請求(http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=text§ion=1)有一個字段,其名稱是「 *」。我該怎麼辦? – lluisu

+0

我更新了我的答案。請參閱編輯 – znat

+0

請參閱編輯 – lluisu