Web サービスを使用して、リモート SQL データベースから情報を保存/取得しようとしています。何らかの理由で、保存したい文字列ではなく、空の文字列が DB に挿入されています。
DB に deviceID のエントリが存在しない場合、文字列 deviceID と dateStamp を格納する必要があります。
DB テーブル名は Trial で、列は次のとおりです。デバイス ID | インストール日
注: データベースに接続して対話します。文字列の代わりに "" と "" を格納するだけです。
誰かがこれがなぜなのか教えてもらえますか? この種のことを試したのはこれが初めてなので、多くの問題を抱えており、見つけたスニペットを自分のニーズに合わせて変更しようとしています。
ここに私のJavaコードがあります:
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings.Secure;
import android.widget.Toast;
public class LicenseCheck extends Activity
{
String deviceID="",dateStamp="";
byte[] data;
HttpPost httppost;
StringBuffer buffer;
HttpResponse response;
HttpClient httpclient;
InputStream inputStream;
List<NameValuePair> nameValuePairs;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final String android_id = Secure.getString(getApplicationContext().getContentResolver(),Secure.ANDROID_ID);
deviceID = android_id;
Date now = new Date();
dateStamp = String.valueOf(now);
try
{
httpclient = new DefaultHttpClient();
httppost = new HttpPost("http://99.57.234.12/Main.php");
// Add your data
nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("device_id", deviceID));
nameValuePairs.add(new BasicNameValuePair("install_date", dateStamp));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
response = httpclient.execute(httppost);
inputStream = response.getEntity().getContent();
data = new byte[256];
buffer = new StringBuffer();
int len = 0;
while (-1 != (len = inputStream.read(data)) )
{
buffer.append(new String(data, 0, len));
}
inputStream.close();
} catch (Exception e) {
Toast.makeText(LicenseCheck.this, "error"+e.toString(), Toast.LENGTH_LONG).show();
}
if(buffer.charAt(0)=='Y')
{
Toast.makeText(LicenseCheck.this, "working: " + buffer.toString() + ".", Toast.LENGTH_LONG).show();
Move_to_next();
LicenseCheck.this.finish();
} else {
Toast.makeText(LicenseCheck.this, "Trial Started", Toast.LENGTH_LONG).show();
Move_to_next();
LicenseCheck.this.finish();
}
}
public void Move_to_next()
{
startActivity(new Intent(this, MainMenu.class));
}
}
PHPは次のとおりです。
<?php
require_once('Connections.php');
mysql_select_db($database_localhost,$localhost);
$device = $_POST['device_id'];
$date = $_POST['install_date'];
$query_search = "select * from trials where device_id = '".$device."'";
$query_exec = mysql_query($query_search) or die(mysql_error());
$rows = mysql_num_rows($query_exec);
if($rows --> 0)
{
echo "Y";
$result = mysql_query("SELECT device_id,install_date FROM trials WHERE device_id = '".$device."'");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);
echo $row[0]; // device_id
echo $row[1]; // install_date
} else {
echo "N";
mysql_query("INSERT INTO trials (device_id, install_date) VALUES ( '".$device."', '".$date."')") or die (mysql_error());
}
?>