-1

アイテムのデータベースを検索しています。Androidアプリで検索を行ってjsonを取得すると、項目にオブジェクトの値がない場合に壊れます。

たとえば、アイテムに対してこのデータが返された場合:

名前 ID IBU ABV

すべてのアイテムに各データ ポイントの値があるわけではないため、アイテムに IBU がない場合、json にそのデータ ポイントがなく、コードが停止します。検索するとクエリの 1 つが壊れ、アイテムに ibu がありません。それで、何も得られなかった場合にそれを無視するように、その横に試してみました。それはまだちょうど止まった。

String beerId = "";
                    String beerName = "";
                    String beerDescription = "";;
                    String beerAbv = "";
                    String beerIbu = "";

                    //json.getJSONArray("data").length()

                    //get json items
                    for(int i = 0; i < 1; i++) {

                        try{
                            beerId = json.getJSONArray("data").getJSONObject(i).getString("id");
                        }
                        finally{}

                        beerName = json.getJSONArray("data").getJSONObject(i).getString("name");
                        beerDescription = json.getJSONArray("data").getJSONObject(i).getString("description");
                        beerAbv = json.getJSONArray("data").getJSONObject(i).getString("abv");
                        try{
                            beerIbu = json.getJSONArray("data").getJSONObject(i).getString("ibu");
                        }
                        finally{beerIbu = "";}
4

1 に答える 1

1

これを修正する良い方法は、すべての作業を行い、探している答えを返すメソッド (void) を作成することです。説明をわかりやすくするために YouTube ビデオに取り組んでいますが、コードは次のとおりです。

 String beerId = GetBeerDataFromJSON(0,"id");
 String beerName = GetBeerDataFromJSON(0,"name");
 String beerDescription = GetBeerDataFromJSON(0,"description");
 String beerAbv = GetBeerDataFromJSON(0,"abv");
 String beerIbu = GetBeerDataFromJSON(0,"ibu");

次に、その void の外側 (ただし同じクラス内) に return メソッドを作成します。

 private String GetBeerDataFromJSON(int position, String whatToGet) {
    String whatIsTheKeyYouAreLookFor = whatToGet;
    int whereInTheJSONArrayForLoopIsTheData = position;

    String holder = "";


    try{
        holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getString(whatIsTheKeyYouAreLookFor);

    } catch (JSONException e) {
        holder = "";
    }



    return holder;
}

このコードをより効率的に記述する方法があります。私のビデオでは、もっと説明します。しかし、これは今のところ機能します。

于 2013-06-13T22:12:25.797 に答える