2017-10-23 13 views
1

モバイル側からリモートサーバーへの情報の充填をユーザーが行う必要があります。たとえば、ログイン/登録用のコードを以下に書いています。私はこれを試したが、サーバに何らかのデータストアを持っていない。私はそれが私のPHPスクリプトが間違っているかもしれないと疑った。リモートデータベースにデータを保存

MainActivity.Java:

public class MainActivity extends Activity { 

TextView name, email, number; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    name = (TextView) findViewById(R.id.name); 
    email = (TextView) findViewById(R.id.email); 
    number = (TextView) findViewById(R.id.number); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void send(View v) { 

    new Send().execute(); 

} 

class Send extends AsyncTask<String, Void, Long> { 

    protected Long doInBackground(String... urls) { 

     String Name = name.getText().toString(); 
     String Email = email.getText().toString(); 
     String Number = number.getText().toString(); 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("https://xxx.000webhostapp.com/phpcode.php"); 

     try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      nameValuePairs.add(new BasicNameValuePair("Name", Name)); 
      nameValuePairs.add(new BasicNameValuePair("Email", Email)); 
      nameValuePairs.add(new BasicNameValuePair("Number", Number)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost); 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
     } 
     return null; 

    } 

    protected void onProgressUpdate(Integer... progress) { 

    } 

    protected void onPostExecute(Long result) { 

     } 
    } 
} 

新しいレコードは、それをテストするために作成されます。これまでのところ、新しいエントリが作成されました。

PHPスクリプト:

<?php 

define('hostname', 'localhost'); 
define('user', 'xxx_username'); 
define('passwort', 'xxx'); 
define('databaseName', 'xxx_name'); 

$conn = mysqli_connect(hostname, user, passwort, databaseName); 

if($conn->connect_error){ 
    die("Connection failed: " .$conn->connect_error); 
} 


$Name = $_POST['Name']; 
$Email = $_POST['Email']; 
$Number = $_POST['Number']; 

$sql = "INSERT INTO demotable (Name, Email, Number) VALUES ('{$Name}','{$Email}','{$Number}')"; 

if($conn->query($sql) === TRUE) { 
    echo "Record created"; 
} else { 
    echo "Error: ".$sql. $conn->error; 
} 

$conn->close(); 

?> 
+0

リスト nameValuePairs =新しいArrayList (2); 「2」は削除する必要があります。 – Anonymous

+0

ChromeアプリケーションであるPOSTMANやARCなどのRESTクライアントでテストし、サーバエラーかどうかを確認してください –

+0

phpcode.phpを確認してください。私は何かがphpcode.phpで間違っていると思う。 –

答えて

0

あなたは)doInBackground(でUI操作を実行しようとしているが故にそれもネットワーク呼び出しを行う前に、例外が発生します。 UI操作は、onPreExecute()およびonPostExecute()でのみ実行できます。一方、ネットワークコールは、のdoInBackground()で実行されます。このコードを試してください

class Send extends AsyncTask<String, Void, Long> { 
String Name,Email,Number; 
@Override 
protected void onPreExecute(){ 
    Name = name.getText().toString(); 
    Email = email.getText().toString(); 
    Number = number.getText().toString(); 
} 
@Override 
protected Long doInBackground(String... urls) { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("https://affe.000webhostapp.com/phpcode.php"); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("Name", Name)); 
     nameValuePairs.add(new BasicNameValuePair("Email", Email)); 
     nameValuePairs.add(new BasicNameValuePair("Number", Integer.toString(Number))); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
    } 
    return null; 

} 
@Override 
protected void onProgressUpdate(Integer... progress) { 

} 
@Override 
protected void onPostExecute(Long result) { 

    } 
} 
+0

'名前'、 '電子メール'、 '番号'を解決できない場合は、TextViewとして定義できますか? – JacobBalb

+0

あなたは何かを逃したかもしれません。あなたの活動でそれを定義しているので、このエラーは起こりません。 –

+0

私は私の答えを更新しましたそれをチェックしてください –