2012-06-11 35 views
0

我有一個int /字符串(s)從一個片段傳遞到另一個。對於我編碼的每種方式,我都會在第67行得到一個NPE(請參閱下面的67)。我不知道如果我以正確的方式解決問題,那麼請查看我的方法,並在答案中包含一些代碼。如何獲得Android openRawResource作爲變量?

Thnx。

什麼傳遞的參數:

. . . 
     int rawRes = R.raw.regulatory_list;//<--THIS IS THE RES I NEED TO PASS 
     args.putInt("KEY_RAW_RES", rawRes); 

     boolean isRawRes = true; 
    args.putBoolean("KEY_IS_RAW_RES", isRawRes); 

     ListViewFragment lvf = new ListViewFragment(); 
     lcFT.replace(R.id.discriptionListContainer, lvf).commit(); 
     lvf.setArguments(args); 
. . . 

ListViewFragment的onActivityCreated:

. . . 
private static final String KEY_URL = "KEY_URL"; 
    private static final String KEY_IS_RAW_RES = "KEY_IS_RAW_RES"; 
    private static final String KEY_RAW_RES = "KEY_RAW_RES"; 
. . . 

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

// Get the string to query from last Fragment and pass it to this 
     // Fragment 
     Bundle args = this.getArguments(); 

     String url = args.getString(KEY_URL); 
     boolean rawRes = args.getBoolean(KEY_IS_RAW_RES); 

     int fileName = (Integer) null;//<--THIS IS LINE 67!! 
     fileName = args.getInt(KEY_RAW_RES); 

     this.runJsonFile(url, jsonSrc, fileName); 
} 

private void runJsonFile(String url, boolean rawRes, int fileName) { 

    if (rawRes == true) { 
     getFromRawRes(fileName); 
    } else { 
     getFromURL(url); 
    } 
} 

    private void getFromRawRes(int fileName) { 
//  InputStream file = getResources().openRawResource(R.raw.regulatory_list); 
     InputStream file = getResources().openRawResource(fileName); 
     JSONParser jParser = new JSONParser(); 
     JSONArray json = jParser.getJSONFromFile(file); 
     callback(json); 
    } 

編輯:

我改線67 - 68按照拉夫·索德答案:

//  int fileName = (Integer) null; 
     int fileName = args.getInt(KEY_RAW_RES); 

這得到了NPE-Thnx的課程!

+0

你爲什麼要將'null'強制轉換爲'Integer'? – kcoppock

回答

1

您正在將null值轉換爲整型變量。有沒有可能的情況下,這不會導致NullPointerException,因爲您首先使用null。在Java和其他幾種語言中,像integer,double,char等原始數據類型不能爲空。

1

也爲您的null鑄造增加,以及對Integer,這種方法使得完全沒有任何邏輯意義:

private void runJsonFile(String url, String resType, int fileName) { 
     String rawRes = null; 
     if (ListViewFragment.KEY_RES_TYPE == rawRes) { 
      getFromRawRes(fileName); 
     } else { 
      getFromURL(url); 
     } 
    } 
} 

這將總是去else塊。您正在初始化rawResnull,然後根據非空的final String進行測試。這個if語句的計算結果爲true的情況永遠不會存在。

+0

Thnx:我剛剛編輯了這個答案,但你發佈了這個答案,但是thnx是爲了捕捉它。 'String rawRes = KEY_RES_TYPE;' – CelticParser

+0

現在它總是'真的'... – kcoppock

+0

給我一分鐘完成它!錯過了全部應付。 – CelticParser