Java 如何在Android中使用PHP MYSQL更新数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18606478/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to Update Data using PHP MYSQL in Android
提问by Sneha
I am writing an app in which I need to update data using PHP MySQL, and every time I am getting message "Update Data Successfully". But whenever I see into my database, I am not getting any changes in values.
我正在编写一个应用程序,我需要在其中使用PHP MySQL更新数据,并且每次收到消息“成功更新数据”。但是每当我查看我的数据库时,我的值都没有发生任何变化。
Logcat says:
Logcat 说:
09-04 12:00:50.176: D/gralloc_goldfish(538): Emulator without GPU emulation detected.
09-04 12:08:38.646: D/InputEventConsistencyVerifier(538): KeyEvent: ACTION_UP but key was not down.
09-04 12:08:38.646: D/InputEventConsistencyVerifier(538): in com.android.internal.view.menu.ExpandedMenuView@4136ec30
09-04 12:08:38.646: D/InputEventConsistencyVerifier(538): 0: sent at 552986000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MENU, scanCode=229, metaState=0, flags=0x8, repeatCount=0, eventTime=552986, downTime=552899, deviceId=0, source=0x101 }
09-04 12:08:39.885: D/(538): UserLoginAppointmentActivity txtPhone[before] :: android.widget.EditText@41389238
09-04 12:08:39.885: D/(538): UserLoginAppointmentActivity txtPass[before] :: android.widget.EditText@4138acb0
09-04 12:08:40.205: W/TextLayoutCache(538): computeValuesWithHarfbuzz -- need to force to single run
09-04 12:08:42.976: D/dalvikvm(538): GC_CONCURRENT freed 131K, 3% free 10157K/10375K, paused 6ms+4ms
09-04 12:08:46.357: D/InputEventConsistencyVerifier(538): KeyEvent: ACTION_UP but key was not down.
09-04 12:08:46.357: D/InputEventConsistencyVerifier(538): in android.widget.EditText@4138acb0
09-04 12:08:46.357: D/InputEventConsistencyVerifier(538): 0: sent at 561313000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_TAB, scanCode=15, metaState=0, flags=0x8, repeatCount=0, eventTime=561313, downTime=561190, deviceId=0, source=0x101 }
09-04 12:08:49.746: D/(538): UserLoginAppointmentActivity txtPhone :: android.widget.EditText@41389238
09-04 12:08:49.746: D/(538): UserLoginAppointmentActivity txtPass :: android.widget.EditText@4138acb0
09-04 12:08:50.066: D/(538): UserLoginAppointmentActivity resultServer :: {"StatusID":"1","UserID":"24","Error":"Login Ok"}
09-04 12:08:50.066: D/(538): UserLoginAppointmentActivity strStatusID[before] :: 0
09-04 12:08:50.066: D/(538): UserLoginAppointmentActivity strUserID[before] :: 0
09-04 12:08:50.066: D/(538): UserLoginAppointmentActivity strError[before] :: Unknow Status!
09-04 12:08:50.066: D/(538): UserLoginAppointmentActivity strStatusID[after] :: 1
09-04 12:08:50.076: D/(538): UserLoginAppointmentActivity strUserID[after] :: 24
09-04 12:08:50.076: D/(538): UserLoginAppointmentActivity strError[after] :: Login Ok
09-04 12:08:50.105: D/(538): UserLoginAppointmentActivity UserID Intent :: 24
09-04 12:08:51.496: D/dalvikvm(538): GC_CONCURRENT freed 204K, 4% free 10345K/10695K, paused 5ms+5ms
09-04 12:08:55.475: D/(538): sAppointmentID :: 24
09-04 12:08:55.475: D/(538): sAppointmentID :: 53
09-04 12:08:56.166: D/(538): resultServer - getByMemberIDR:: {"UserID":"24","AppointmentID":"53","Type":"Cardiology","Date":"12-09-2013","Time":"22:15","Status":"Pending"}
09-04 12:08:56.166: D/(538): strUserID :: 24
09-04 12:08:56.176: D/(538): strAppointmentID :: 53
09-04 12:08:56.176: D/(538): strType :: Cardiology
09-04 12:08:56.176: D/(538): strDate :: 12-09-2013
09-04 12:08:56.176: D/(538): strTime :: 22:15
09-04 12:11:06.866: D/dalvikvm(538): GC_CONCURRENT freed 278K, 4% free 10459K/10887K, paused 7ms+7ms
09-04 12:15:36.425: D/(538): resultServer - updateData:: {"StatusID":"1","Message":"updated"}
09-04 12:15:37.015: D/dalvikvm(538): GC_CONCURRENT freed 330K, 5% free 10572K/11015K, paused 7ms+9ms
PHP Script:
PHP脚本:
<?php
$objConnect = mysql_connect("localhost","root","");
$objDB = mysql_select_db("android");
$strUserID = $_POST["sUserID"];
$strAppointmentID = $_POST["sAppointmentID"];
$strType = $_POST["sType"];
$strDate = $_POST["sDate"];
$strTime = $_POST["sTime"];
/*** Update ***/
$strSQL = " UPDATE book_appointment SET
Type = '".$strType."',
Date = '".$strDate."',
Time = '".$strTime."'
WHERE AppointmentID = '".$strAppointmentID."' ";
$objQuery = mysql_query($strSQL);
if(!$objQuery)
{
$arr['StatusID'] = "0";
$arr['Message'] = "Cannot save data!";
}
else
{
$arr['StatusID'] = "1";
$arr['Message'] = "updated";
}
mysql_close($objConnect);
echo json_encode($arr);
?>
UpdateActivity.java:-
UpdateActivity.java:-
public class UpdateActivity extends Activity {
private static final String tag = null;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
// Permission StrictMode
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
showInfo();
// btnSave
Button btnSave = (Button) findViewById(R.id.btnSave);
// Perform action on click
btnSave.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(SaveData())
{
// When Save Complete
Intent newActivity = new Intent(UpdateActivity.this,RescheduleActivity.class);
startActivity(newActivity);
}
}
});
// btnCancel
final Button btnCancel = (Button) findViewById(R.id.btnCancel);
// Perform action on click
btnCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent newActivity = new Intent(UpdateActivity.this,RescheduleActivity.class);
startActivity(newActivity);
}
});
}
public void showInfo()
{
// txtMemberID,txtUsername,txtPassword,txtConPassword,txtName,txtEmail,txtTel
final TextView tUserID = (TextView)findViewById(R.id.txtUserID);
final TextView tAppointmentID = (TextView)findViewById(R.id.txtAppointmentID);
final TextView tType = (TextView)findViewById(R.id.txtType);
final TextView tDate = (TextView)findViewById(R.id.txtDate);
final TextView tTime = (TextView)findViewById(R.id.txtTime);
Button btnSave = (Button) findViewById(R.id.btnSave);
Button btnCancel = (Button) findViewById(R.id.btnCancel);
String url = "http://10.0.2.2/appointments/getByMemberIDR.php";
Intent intent= getIntent();
final String UserID = intent.getStringExtra("UserID");
final String AppointmentID = intent.getStringExtra("AppointmentID");
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("sUserID", UserID));
params.add(new BasicNameValuePair("sAppointmentID", AppointmentID));
String resultServer = getHttpPost(url,params);
Log.d(tag, "resultServer - getByMemberIDR:: " + resultServer);
String strUserID = "";
String strAppointmentID = "";
String strType = "";
String strDate = "";
String strTime = "";
JSONObject c;
try {
c = new JSONObject(resultServer);
strUserID = c.getString("UserID");
Log.d(tag, "strUserID :: " + strUserID);
strAppointmentID = c.getString("AppointmentID");
Log.d(tag, "strAppointmentID :: " + strAppointmentID);
strType = c.getString("Type");
Log.d(tag, "strType :: " + strType);
strDate = c.getString("Date");
Log.d(tag, "strDate :: " + strDate);
strTime = c.getString("Time");
Log.d(tag, "strTime :: " + strTime);
if(!strUserID.equals(""))
{
tUserID.setText(strUserID);
tAppointmentID.setText(strAppointmentID);
tType.setText(strType);
tDate.setText(strDate);
tTime.setText(strTime);
}
else
{
tUserID.setText("====");
tAppointmentID.setText("====");
tType.setText("====");
tDate.setText("====");
tTime.setText("====");
btnSave.setEnabled(false);
btnCancel.requestFocus();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean SaveData()
{
// txtMemberID,txtPassword,txtName,txtEmail,txtTel
final EditText txtType = (EditText)findViewById(R.id.txtType);
final EditText txtDate = (EditText)findViewById(R.id.txtDate);
final EditText txtTime = (EditText)findViewById(R.id.txtTime);
//Dialog
final AlertDialog.Builder ad = new AlertDialog.Builder(this);
ad.setTitle("Error! ");
ad.setIcon(android.R.drawable.btn_star_big_on);
ad.setPositiveButton("Close", null);
String url = "http://10.0.2.2/appointments/updateData.php";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("sType", txtType.getText().toString()));
params.add(new BasicNameValuePair("sDate", txtDate.getText().toString()));
params.add(new BasicNameValuePair("sTime", txtTime.getText().toString()));
String resultServer = getHttpPost(url,params);
Log.d(tag, "resultServer - updateData:: " + resultServer);
/*** Default Value ***/
String strStatusID = "0";
String strMessage = "Unknow Status!";
JSONObject c;
try {
c = new JSONObject(resultServer);
strStatusID = c.getString("StatusID");
strMessage = c.getString("Message");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Prepare Save Data
if(strStatusID.equals("0"))
{
ad.setMessage(strMessage);
ad.show();
return false;
}
else
{
Toast.makeText(UpdateActivity.this, "Update Data Successfully", Toast.LENGTH_SHORT).show();
}
return true;
}
public String getHttpPost(String url,List<NameValuePair> params) {
StringBuilder str = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
try {
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = client.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) { // Status OK
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
str.append(line);
}
} else {
Log.e("Log", "Failed to download result..");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return str.toString();
}
}
采纳答案by Android
i am not sure but i think you should need to use below lines in SaveData():
我不确定,但我认为您应该需要在SaveData() 中使用以下几行:
final TextView tUserID = (TextView)findViewById(R.id.txtUserID);
final TextView tAppointmentID = (TextView)findViewById(R.id.txtAppointmentID);
so your SavaData()should look like this:
所以你的SavaData()应该是这样的:
public boolean SaveData()
{
final TextView txtUserID = (TextView)findViewById(R.id.txtUserID);
final TextView txtAppointmentID = (TextView)findViewById(R.id.txtAppointmentID);
final EditText txtType = (EditText)findViewById(R.id.txtType);
final EditText txtDate = (EditText)findViewById(R.id.txtDate);
final EditText txtTime = (EditText)findViewById(R.id.txtTime);
//Dialog
final AlertDialog.Builder ad = new AlertDialog.Builder(this);
ad.setTitle("Error! ");
ad.setIcon(android.R.drawable.btn_star_big_on);
ad.setPositiveButton("Close", null);
String url = "http://10.0.2.2/appointments/updateData.php";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("sUserID", txtUserID.getText().toString()));
params.add(new BasicNameValuePair("sAppointmentID", txtAppointmentID.getText().toString()));
params.add(new BasicNameValuePair("sType", txtType.getText().toString()));
params.add(new BasicNameValuePair("sDate", txtDate.getText().toString()));
params.add(new BasicNameValuePair("sTime", txtTime.getText().toString()));
String resultServer = getHttpPost(url,params);
Log.d(tag, "resultServer - updateData:: " + resultServer);
/*** Default Value ***/
String strStatusID = "0";
String strMessage = "Unknow Status!";
JSONObject c;
try {
c = new JSONObject(resultServer);
strStatusID = c.getString("StatusID");
strMessage = c.getString("Message");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Prepare Save Data
if(strStatusID.equals("0"))
{
ad.setMessage(strMessage);
ad.show();
return false;
}
else
{
Toast.makeText(UpdateActivity.this, "Update Data Successfully", Toast.LENGTH_SHORT).show();
}
return true;
}
As we know you are using UserID and AppointmentID to fetch all appointments, so whenever you are doing changes it requires that particular UserID and AppointmentID to point that row, which you have clicked...may be the reason
我们知道您正在使用 UserID 和 AppointmentID 来获取所有约会,因此每当您进行更改时,它都需要特定的 UserID 和 AppointmentID 指向您单击的那一行……可能是原因
please let me know this :)
请让我知道这一点:)
回答by Elon Than
You missed $
in WHERE
statement. Also don't use deprecated mysql_*
functions and validate data you're receiving from user!
你错过$
了WHERE
陈述。也不要使用不推荐使用的mysql_*
函数并验证您从用户那里收到的数据!
回答by WensonSmith
/*** Update ***/
$strSQL = " UPDATE book_appointment SET
Type = '".$strType."',
Date = '".$strDate."',
Time = '".$strTime."'
WHERE AppointmentID = '".strAppointmentID."' ";
$strAppointmentID
回答by Vedang Jadhav
What is happening is "Error" is not there in PHP of yours, its "Message". So it is going to exception in the try catch module.
发生的事情是你的 PHP 中没有“错误”,它的“消息”。所以它会在 try catch 模块中发生异常。
Change strMessage = c.getString("Error");
to strMessage = c.getString("Message");
更改strMessage = c.getString("Error");
为strMessage = c.getString("Message");
That's it..THen it will work..
就是这样..然后它会工作..
回答by Roy
For the PHP
对于 PHP
$strUserID = $_POST["sUserID"];
$strAppointmentID = $_POST["sAppointmentID"];
$strType = $_GET["sType"];
$strDate = $_GET["sDate"];
$strTime = $_GET["sTime"];
$strSQL = 'UPDATE book_appointment
SET
Type = "'.$strType.'",
Date = "'.$strDate.'",
Time = "'.$strTime.'"
WHERE AppointmentID = "'.$strAppointmentID.'"';