如何在Android中使用ID从服务器获取数据

时间:2013-08-23 07:24:18

标签: php android mysql

我正在编写一个原生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();
                }   
            }

4 个答案:

答案 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)

  1. 首先确保您有效AppointmentIDUserId以及

  2. 在方法UpcomingActivity.java的{​​{1}}中
  3. 您没有提供onContextItemSelected,而只是向AppointmentID提供UserID

    < / LI>
  4. 列出,但在方法Intend的{​​{1}}中,您正在申请Updateactivity,这是免费的。

  5. 因此,您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值,这将是一个错误的话题