我正在编写一个原生Android应用程序,其中我使用PHP MYSQL从服务器获取数据
在这个[约会列表]中,我允许用户重新安排约会,但每当我点击项目获取空白表格时,总之不能获得我在列表中点击的特定约会的数据。
问题
如何使用AppointmentID在表单中显示数据?
下面我展示了我写的所有必需代码[客户端&服务器端]]
UpcomingActivity.java:
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int menuItemIndex = item.getItemId();
String[] menuItems = Cmd;
String CmdName = menuItems[menuItemIndex];
// Check Event Command
if ("Cancel".equals(CmdName))
{
Toast.makeText(UpcomingActivity.this,"Selected Cancel",Toast.LENGTH_LONG).show();
}
else if ("Reschedule".equals(CmdName))
{
Toast.makeText(UpcomingActivity.this,"Selected Update",Toast.LENGTH_LONG).show();
String sAppointmentID = MyArrList.get(info.position).get("UserID").toString();
Log.d(tag, "sAppointmentID :: " + sAppointmentID);
Intent newActivity = new Intent(UpcomingActivity.this, UpdateActivity.class);
newActivity.putExtra("UserID", sAppointmentID);
startActivity(newActivity);
}
return true;
}
UpdateActivity.java:
public void showInfo()
{
final TextView tAppointmentID = (TextView)findViewById(R.id.txtUsername);
final TextView tType = (TextView)findViewById(R.id.txtName);
final TextView tDate = (TextView)findViewById(R.id.txtEmail);
final TextView tTime = (TextView)findViewById(R.id.txtTel);
Button btnSave = (Button) findViewById(R.id.btnSave);
Button btnCancel = (Button) findViewById(R.id.btnCancel);
String url = "http://10.0.2.2/appointments/getByMemberID.php";
Intent intent= getIntent();
final String AppointmentID = intent.getStringExtra("AppointmentID");
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("sAppointmentID", AppointmentID));
String resultServer = getHttpPost(url,params);
String strAppointmentID = "";
String strType = "";
String strDate = "";
String strTime = "";
JSONObject c;
try {
c = new JSONObject(resultServer);
strAppointmentID = c.getString("UserID");
Log.d(TAG, "String strAppointmentID" + strAppointmentID);
strType = c.getString("Type");
Log.d(TAG, "String strType" + strType);
strDate = c.getString("Date");
Log.d(TAG, "String strDate" + strDate);
strTime = c.getString("Time");
Log.d(TAG, "String strTime" + strTime);
if(!strAppointmentID.equals(""))
{
tAppointmentID.setText(strAppointmentID);
tType.setText(strType);
tDate.setText(strDate);
tTime.setText(strTime);
}
else
{
tAppointmentID.setText("-");
tType.setText("-");
tDate.setText("-");
tTime.setText("-");
btnSave.setEnabled(false);
btnCancel.requestFocus();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:3)
选项1
开发Java EE Web服务,并将其托管在服务器上。您的Android应用需要将数据与Web服务相关联并将其发送到服务器。服务器可以接收数据并执行它想要的操作。服务器还可以通过Web服务的相同响应处理和响应更多信息。你需要google for hello world Java EE。我找到了一个。
一旦您的Java EE在本地桌面(或开发机器)上工作,您就可以将WAR或EAR复制到EC2,以使应用程序可以通过Internet工作,而无需经历创建网络的痛苦。是开放的和DMZ。
选项2
你可以开发一个基于java套接字的产品,你的android应用程序连接到,通过clientsocket。这样,您可以序列化数据并通过流发送数据。并在服务器端反序列化它并重建对象。这种方法需要更严格的软件开发。如果你是第一次开发人员,那可能会非常麻烦,我建议选择1。
希望我已经给出了一些基本方向。
答案 1 :(得分:2)
首先确保您有效AppointmentID
和UserId
以及
UpcomingActivity.java
的{{1}}中您没有提供onContextItemSelected
,而只是向AppointmentID
提供UserID
列出,但在方法Intend
的{{1}}中,您正在申请Updateactivity
,这是免费的。
因此,您showData
的更新应如下所示
intent.getStringExtra("AppointmentID")
答案 2 :(得分:1)
我注意到了一些问题(可能是错别字,但无论如何我更愿意问):
getByMemberID.php
,但您尚未在问题中包含其源代码 - 您确实拥有此类服务,对吧? :)onContextItemSelected
中,您开始UpdateActivity
并将UserID
作为额外费用传递给showInfo
。但是在该活动的AppointmentID
方法中,您试图从意图的附加内容中获取{{1}},因此它不会处理任何数据。答案 3 :(得分:0)
1)尝试天气你的PHP代码工作正常或不... 您可以直接在服务器上运行并将UserId和appoinmentId作为参数传递来执行此操作吗?
例如.... www.abc.com?sUserId=123?sAppointmentID=456
看天气它会显示正确的输出。
2)你正在调用getByMemberID.php,但是你已经指定了它的代码,但是你没有传递“AppointmentID”,那也用php代码检查你正在重温它吗?
3)在UpdateActivity.java中调用updateData.php时:你没有提供“AppointmentID”但是你在PHP代码中重新获取它默认会得到null值,这将是一个错误的话题