質問編集履歴
5
誤字の修正
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -130,8 +130,7 @@ | |
| 130 130 | 
             
            はうまくいきませんでした。
         | 
| 131 131 | 
             
            そこで、取得したurl
         | 
| 132 132 | 
             
            http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=us/limit=200/json
         | 
| 133 | 
            -
            のページを眺めたところ、"entry"が、"results"に当たりそうなので、その部分を変更し、rankingDataに"entry"の値を代入することができました。しかし、その後がうまくいきません。 | 
| 133 | 
            +
            のページを眺めたところ、"entry"が、"results"に当たりそうなので、その部分を変更し、rankingDataに"entry"の値を代入することができました。しかし、その後がうまくいきません。
         | 
| 134 | 
            -
            https://github.com/phi7/app_ranking/blob/main/lib/ranking_page.dart
         | 
| 135 134 |  | 
| 136 135 | 
             
            エラー内容
         | 
| 137 136 | 
             
            ```console
         | 
4
URLを新しいものに変更し、###試したことに「追記②」をつけました。
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -121,13 +121,67 @@ | |
| 121 121 | 
             
            と書いており、これが原因なのでしょうか?
         | 
| 122 122 | 
             
            なにかご存じの方がいたら教えていただけると嬉しいです。
         | 
| 123 123 |  | 
| 124 | 
            +
            追記②
         | 
| 125 | 
            +
            おっしゃるとおり、urlの最後をxmlからjsonに変えたところ、
         | 
| 124 | 
            -
             | 
| 126 | 
            +
            feedData = data["feed"];
         | 
| 127 | 
            +
            print(feedData);
         | 
| 128 | 
            +
            までデータをとることができました。しかし、もとのコードとデータの取得先が違うのか"results"という項目がないためか、
         | 
| 129 | 
            +
            rankingData = feedData["results"];
         | 
| 125 | 
            -
             | 
| 130 | 
            +
            はうまくいきませんでした。
         | 
| 126 | 
            -
              flutter:
         | 
| 127 | 
            -
             | 
| 131 | 
            +
            そこで、取得したurl
         | 
| 128 | 
            -
              http: ^0.13.3
         | 
| 129 | 
            -
             | 
| 132 | 
            +
            http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=us/limit=200/json
         | 
| 133 | 
            +
            のページを眺めたところ、"entry"が、"results"に当たりそうなので、その部分を変更し、rankingDataに"entry"の値を代入することができました。しかし、その後がうまくいきません。もはや、この部分だけの問題ではなさそうなので以下にgithubを載せます。
         | 
| 130 | 
            -
             | 
| 134 | 
            +
            https://github.com/phi7/app_ranking/blob/main/lib/ranking_page.dart
         | 
| 131 | 
            -
              url_launcher: ^6.0.9
         | 
| 132 135 |  | 
| 133 | 
            -
             | 
| 136 | 
            +
            エラー内容
         | 
| 137 | 
            +
            ```console
         | 
| 138 | 
            +
            flutter: us
         | 
| 139 | 
            +
            flutter: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=us/limit=200/json
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            ======== Exception caught by widgets library =======================================================
         | 
| 142 | 
            +
            The following _TypeError was thrown building RankingPage(dirty, state: _RankingPageState#5f572):
         | 
| 143 | 
            +
            type 'Null' is not a subtype of type 'String'
         | 
| 144 | 
            +
             | 
| 145 | 
            +
            The relevant error-causing widget was: 
         | 
| 146 | 
            +
              RankingPage file:///Users/nt/StudioProjects/app_ranking/lib/main.dart:18:13
         | 
| 147 | 
            +
            When the exception was thrown, this was the stack: 
         | 
| 148 | 
            +
            #0      _RankingPageState.build (package:app_ranking/ranking_page.dart:177:44)
         | 
| 149 | 
            +
            #1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4691:27)
         | 
| 150 | 
            +
            #2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)
         | 
| 151 | 
            +
            #3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
         | 
| 152 | 
            +
            #4      Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
         | 
| 153 | 
            +
            ...
         | 
| 154 | 
            +
            ====================================================================================================
         | 
| 155 | 
            +
            flutter: Instance of 'Response'
         | 
| 156 | 
            +
            flutter: {"feed":{"author":{"name":{"label":"iTunes Store"}, "uri":{"label":"http://www.apple.com/itunes/"}}, "entry":[
         | 
| 157 | 
            +
            {"im:name":{"label":"TikTok"}, "im:image":[
         | 
| 158 | 
            +
            {"label":"https://is2-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/53x53bb.png", "attributes":{"height":"53"}}, 
         | 
| 159 | 
            +
            {"label":"https://is1-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/75x75bb.png", "attributes":{"height":"75"}}, 
         | 
| 160 | 
            +
            {"label":"https://is3-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/100x100bb.png", "attributes":{"height":"100"}}], "summary":{"label":"TikTok is THE destination for mobile videos. On TikTok, short-form video<…>
         | 
| 161 | 
            +
            flutter: 200
         | 
| 162 | 
            +
            flutter: {feed: {author: {name: {label: iTunes Store}, uri: {label: http://www.apple.com/itunes/}}, entry: [{im:name: {label: TikTok}, im:image: [{label: https://is2-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/53x53bb.png, attributes: {height: 53}}, {label: https://is1-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/75x75bb.png, attributes: {height: 75}}, {label: https://is3-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/100x100bb.png, attributes: {height: 100}}], summary: {label: TikTok is THE destination for mobile videos. On TikTok, short-form videos are exciting, spontaneous, and genuine. Wh<…>
         | 
| 163 | 
            +
            flutter: {author: {name: {label: iTunes Store}, uri: {label: http://www.apple.com/itunes/}}, entry: [{im:name: {label: TikTok}, im:image: [{label: https://is2-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/53x53bb.png, attributes: {height: 53}}, {label: https://is1-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/75x75bb.png, attributes: {height: 75}}, {label: https://is3-ssl.mzstatic.com/image/thumb/Purple125/v4/d5/f8/3e/d5f83ec1-8903-ba99-2605-ddc4ce0ecd51/AppIcon_TikTok-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/100x100bb.png, attributes: {height: 100}}], summary: {label: TikTok is THE destination for mobile videos. On TikTok, short-form videos are exciting, spontaneous, and genuine. Whether y<…>
         | 
| 164 | 
            +
            flutter: null
         | 
| 165 | 
            +
             | 
| 166 | 
            +
            ======== Exception caught by widgets library =======================================================
         | 
| 167 | 
            +
            The following _TypeError was thrown building RankingPage(dirty, state: _RankingPageState#5f572):
         | 
| 168 | 
            +
            type 'Null' is not a subtype of type 'String'
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            The relevant error-causing widget was: 
         | 
| 171 | 
            +
              RankingPage file:///Users/nt/StudioProjects/app_ranking/lib/main.dart:18:13
         | 
| 172 | 
            +
            When the exception was thrown, this was the stack: 
         | 
| 173 | 
            +
            #0      _RankingPageState.build (package:app_ranking/ranking_page.dart:177:44)
         | 
| 174 | 
            +
            #1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4691:27)
         | 
| 175 | 
            +
            #2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)
         | 
| 176 | 
            +
            #3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
         | 
| 177 | 
            +
            #4      Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
         | 
| 178 | 
            +
            ...
         | 
| 179 | 
            +
            ====================================================================================================
         | 
| 180 | 
            +
            Lost connection to device.
         | 
| 181 | 
            +
            ```
         | 
| 182 | 
            +
             | 
| 183 | 
            +
            また、urlにcc="国名"を入れることで、各国のランキングがとれるようになるかと思いきや、どれも変わりませんでした。
         | 
| 184 | 
            +
            http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/limit=200/json
         | 
| 185 | 
            +
            http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=us/limit=200/json
         | 
| 186 | 
            +
            http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=jp/limit=200/json
         | 
| 187 | 
            +
            データの取得方法と、各国のランキングのurlの発見方法についてご存知の方が教えていただけると嬉しいです。
         | 
3
teminal→console
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -11,7 +11,7 @@ | |
| 11 11 |  | 
| 12 12 | 
             
            dataにしっかり値が代入されるようにしたいです。
         | 
| 13 13 |  | 
| 14 | 
            -
            ### print関数で | 
| 14 | 
            +
            ### print関数でconsoleに出力されたもの
         | 
| 15 15 |  | 
| 16 16 | 
             
            ```
         | 
| 17 17 | 
             
            flutter: us
         | 
| @@ -96,7 +96,7 @@ | |
| 96 96 | 
             
                print(response);
         | 
| 97 97 | 
             
            がうまくいかないようで
         | 
| 98 98 |  | 
| 99 | 
            -
            ``` | 
| 99 | 
            +
            ```console
         | 
| 100 100 | 
             
            flutter: us
         | 
| 101 101 | 
             
            flutter: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=us/limit=200/xml
         | 
| 102 102 | 
             
            ======== Exception caught by widgets library =======================================================
         | 
2
teminalの書式の改善
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -96,7 +96,7 @@ | |
| 96 96 | 
             
                print(response);
         | 
| 97 97 | 
             
            がうまくいかないようで
         | 
| 98 98 |  | 
| 99 | 
            -
             | 
| 99 | 
            +
            ```teminal
         | 
| 100 100 | 
             
            flutter: us
         | 
| 101 101 | 
             
            flutter: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=us/limit=200/xml
         | 
| 102 102 | 
             
            ======== Exception caught by widgets library =======================================================
         | 
| @@ -114,6 +114,7 @@ | |
| 114 114 | 
             
            ...
         | 
| 115 115 | 
             
            ====================================================================================================
         | 
| 116 116 |  | 
| 117 | 
            +
            ```
         | 
| 117 118 | 
             
            とエラーがでるようになりました、、、
         | 
| 118 119 | 
             
            取得したurlのページを開くと頭に
         | 
| 119 120 | 
             
            This XML file does not appear to have any style information associated with it. The document tree is shown below.
         | 
1
URLを新しいものに変更し、###試したことに「追記」をつけました。
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -78,6 +78,48 @@ | |
| 78 78 | 
             
            グーグルで 「response body null flutter」と検索して、下記のサイトに辿り着きましたが、そこでも解決されていないようです。
         | 
| 79 79 | 
             
            https://stackoverflow.com/questions/64942048/flutter-response-body-is-empty
         | 
| 80 80 |  | 
| 81 | 
            +
            追記
         | 
| 82 | 
            +
            おっしゃるとおりでURLが変わっていたようなので、新しいURLで試してみました。
         | 
| 83 | 
            +
            (初期値は currentCode = 'us';
         | 
| 84 | 
            +
                  currentType = 'topfree';
         | 
| 85 | 
            +
                  currentGenre = 'applications';に)
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            ```dart
         | 
| 88 | 
            +
            String? currentTypeAndGenre = "$currentType$currentGenre";
         | 
| 89 | 
            +
            var url = Uri.parse(
         | 
| 90 | 
            +
                  "http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/$currentTypeAndGenre/cc=$currentCode/limit=200/xml");
         | 
| 91 | 
            +
                print(url);
         | 
| 92 | 
            +
            ```
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            print(url)まではteminalに出力されましたが、その後の
         | 
| 95 | 
            +
            http.Response response = await http.get(url);
         | 
| 96 | 
            +
                print(response);
         | 
| 97 | 
            +
            がうまくいかないようで
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            //termial
         | 
| 100 | 
            +
            flutter: us
         | 
| 101 | 
            +
            flutter: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/cc=us/limit=200/xml
         | 
| 102 | 
            +
            ======== Exception caught by widgets library =======================================================
         | 
| 103 | 
            +
            The following _TypeError was thrown building RankingPage(dirty, state: _RankingPageState#aa6a8):
         | 
| 104 | 
            +
            type 'Null' is not a subtype of type 'String'
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            The relevant error-causing widget was: 
         | 
| 107 | 
            +
              RankingPage file:///Users/nt/StudioProjects/app_ranking/lib/main.dart:18:13
         | 
| 108 | 
            +
            When the exception was thrown, this was the stack: 
         | 
| 109 | 
            +
            #0      _RankingPageState.build (package:app_ranking/ranking_page.dart:177:44)
         | 
| 110 | 
            +
            #1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4691:27)
         | 
| 111 | 
            +
            #2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)
         | 
| 112 | 
            +
            #3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
         | 
| 113 | 
            +
            #4      Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
         | 
| 114 | 
            +
            ...
         | 
| 115 | 
            +
            ====================================================================================================
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            とエラーがでるようになりました、、、
         | 
| 118 | 
            +
            取得したurlのページを開くと頭に
         | 
| 119 | 
            +
            This XML file does not appear to have any style information associated with it. The document tree is shown below.
         | 
| 120 | 
            +
            と書いており、これが原因なのでしょうか?
         | 
| 121 | 
            +
            なにかご存じの方がいたら教えていただけると嬉しいです。
         | 
| 122 | 
            +
             | 
| 81 123 | 
             
            ### 補足情報(FW/ツールのバージョンなど)
         | 
| 82 124 | 
             
            dependencies:
         | 
| 83 125 | 
             
              flutter:
         | 
