質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

2回答

535閲覧

fllutterでhttpライブラリを用いた、サーバー上のjsonファイルの取得

Nanmotsu

総合スコア22

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2023/02/25 13:07

編集2023/02/25 13:11

実現したいこと

flutterでサーバー上にアップロードしたJsonファイルを取得したい

前提

httpライブラリでjsonファイルを取得しようとしていますが、どうもうまく動いていません
ブラウザで確認すると、jsonファイルは開けます

該当のソースコード

Dart

1import 'package:http/http.dart' as http; 2import 'dart:convert'; 3 4Future<Map<String,dynamic>> getTitleJsonData(String path) async { 5 6 Map<String,dynamic> titleList; 7 titleList = await getData(); 8 return titleList; 9} 10 11 12 13Future<dynamic> getData() async { 14 15 print("ok1"); 16 17 const url='https://~~~.com/flutter/titledata.json'; 18 await http.get(Uri.parse(url)).then((response){ 19 20 print("ok2"); 21 22 if (response.statusCode == 200) { 23 String data = response.body; 24 dynamic jsonObjects = jsonDecode(data); 25 return jsonObjects; 26 } 27 }); 28}

結果

上記の関数を外部で呼んでいますが
const url='https://~~~.com/flutter/titledata.json';
await http.get(Uri.parse(url)).then((response){
以降が詰まっているのか、「ok2」とprintされません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

https://nagomi-informal.net/archives/572
を参考に

1- Go to flutter\bin\cache and remove a file named: flutter_tools.stamp
2- Go to flutter\packages\flutter_tools\lib\src\web and open the file chrome.dart.
3- Find '--disable-extensions'
4- Add '--disable-web-security'

の手順を踏むことで解決されました。

※日本語を入れる際は、php文字コードに注意しないと読み込めませんでした。

投稿2023/02/26 06:38

Nanmotsu

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

dynamicを使うと型に関する矛盾を把握しにくいのでやむを得ない箇所のみにして、
できるだけ型を意識してコードを書くのが良いと思います。
https://docs.flutter.dev/cookbook/networking/fetch-data#convert-the-httpresponse-to-an-album
ここら辺で基本的なコードを確認すると良いと思います。

下記のコードでどうでしょう?

Future<Map<String,dynamic>> getData() async { print("ok1"); const url='https://~~~.com/flutter/titledata.json'; try{ final response = await http.get(Uri.parse(url)); if(response.statusCode == 200){ String data = response.body; final jsonObjects = jsonDecode(data) as Map<String, dynamic>; return jsonObjects; }else{ throw Exception('APIからデータを取得できませんでした。ステータスコード: ${response.statusCode}'); } }catch(e){ throw Exception('エラーが発生しました: $e'); } }

投稿2023/02/26 01:56

編集2023/02/26 02:01
moriman

総合スコア615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nanmotsu

2023/02/26 05:04

ご回答ありがとうございます。 上記のように変えたところ throw Exception('エラーが発生しました: $e'); が返されています。 (XMLHttpRequest error.) jsonからphpからの取得に変えまして phpファイルの先頭に header("Access-Control-Allow-Origin=> *"); header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept'); をつけて返しましたが、同様のエラーです。 何かサーバー側で行うことがあるのでしょうか? (サーバーはCENTOS7でLAMP環境で構築しております) 参考:https://teratail.com/questions/7lybhliczadh9b
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問