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

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

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

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

855閲覧

ReactNativeでXMLHttpRequestをしたらAndroidのPOSTだけ通らない

mattun_evo

総合スコア9

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2019/11/26 07:58

タイトルのとおりです。

PHPファイルはさくらサーバーにあり、そのサーバーのDBへデータを送信するという流れで、IOSでは送信し、データを保存できるのに、Androidだけできないという状況です。

アンドロイドは実機、エミュレーター両方試していますがダメな状況です。

ピンポイントで解決策は出るような問題ではないと思いますので、考えられることがあれば試したいのでぜひ知見をお貸しください。
よろしくお願いします。

js

1//MemoDataCreateScreen.js 2 3 class MemoDataCreateScreen extends React.Component { 4 state = { 5 text: '', 6 mean: '' 7 }; 8 addSQL() { 9 if (this.state.text == '' && this.state.mean == '') 10 return Alert.alert('未入力です'); 11 const request = new XMLHttpRequest(); 12 request.onreadystatechange = function() { 13 console.log(request); 14 if (request.readyState === 4) { 15 if (request.status == 200) { 16 console.log('通信成功'); 17 } else { 18 console.log('通信失敗'); 19 } 20 } 21 }; 22 request.onload = function() { 23 console.log('通信完了!'); 24 }; 25 request.open( 26 'POST', 27 'https://ここにサーバー名/secret.php', 28 true 29 ); 30 request.send(`text=${this.state.text}&mean=${this.state.mean}`); 31 } 32 test() { 33 console.log('test'); 34 } 35 36 render() { 37 return ( 38 <View> 39 <TextInput 40 style={styles.textInput} 41 placeholder='Textをここに入力' 42 onChangeText={text => { 43 this.setState({ 44 text: text 45 }); 46 }} 47 ></TextInput> 48 <TextInput 49 style={styles.textInput} 50 placeholder='Meanをここに入力' 51 multiline 52 onChangeText={text => { 53 this.setState({ 54 mean: text 55 }); 56 }} 57 ></TextInput> 58 <TouchableHighlight> 59 <Button title='送信' onPress={() => this.addSQL()} /> 60 </TouchableHighlight> 61 </View> 62 ); 63 } 64} 65

php

1//secret.php 2<?php 3$textValue = $_POST["text"]; 4$mean = $_POST["mean"]; 5echo 'test'; 6 7try { 8 $pdo = new PDO('mysql:dbname=ksk-tennis_english;charset=utf8;host=mysql743.db.sakura.ne.jp', 'ksk-tennis', 'yukitiindb11'); //root1個目はid、2個目はパスワード 9} catch (PDOException $e) { 10 exit('DB Error:'.$e->getMessage()); 11} 12 13 14//3.データ登録SQL作成 15$sql = "INSERT INTO `posts`(`indate`, `text`, `mean`) VALUES (sysdate(),:textValue, :mean)"; 16$stmt = $pdo->prepare($sql); 17$stmt->bindValue(':textValue', $textValue, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) 18$stmt->bindValue(':mean', $mean, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) 19$status = $stmt->execute(); //実行 20// var_dump("aaa"); 21//debagよう 22//4.データ登録処理後 23if ($status==false) { 24 //SQL実行時にエラーがある場合(エラーオブジェクト取得して表示) 25 $error = $stmt->errorInfo(); 26 exit("SQL Error:".$error[2]); 27} else { 28 //5.index.phpへリダイレクト 29 echo "送信したっす"; 30 // header("Location: index.php"); 31 exit(); //終了のおまじない 32} 33

xml

1//AndroidManifest.xml 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.helloworld"> 4 5 <uses-permission android:name="android.permission.INTERNET" /> 6 <uses-permission android:name="android.permission.RECORD_AUDIO"/> 7 8 <application 9 android:name=".MainApplication" 10 android:label="@string/app_name" 11 android:icon="@mipmap/ic_launcher" 12 android:roundIcon="@mipmap/ic_launcher_round" 13 android:allowBackup="false" 14 android:theme="@style/AppTheme"> 15 <activity 16 android:name=".MainActivity" 17 android:label="@string/app_name" 18 android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 19 android:windowSoftInputMode="adjustResize"> 20 <intent-filter> 21 <action android:name="android.intent.action.MAIN" /> 22 <category android:name="android.intent.category.LAUNCHER" /> 23 </intent-filter> 24 </activity> 25 <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> 26 </application> 27 28</manifest> 29

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

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

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

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

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

guest

回答1

0

自己解決

axiosでqs.postしたら普通に行けたので、コードをよく見直した結果、

js

1 request.setRequestHeader( 2 'Content-Type', 3 'application/x-www-form-urlencoded' 4 ); 5request.send(`text=${this.state.text}&mean=${this.state.mean}`);

4行を最後の.sendの上に、addSQL内に追記したところいけました。
送信する型を指定してあげるみたいですが、send内の書き方はこのような型していにしないと動かないとかそんな感じみたいです。ちょっと難しいところなので、今回の場合ではこのような書き方で動きました。という感じでお願いします。

投稿2019/11/26 15:17

mattun_evo

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問