如何从存储在服务器上的表中检索列值?

时间:2014-03-23 20:15:40

标签: java android mysql database

我有一个Android应用程序。我已经在webhost上免费注册了我的域名。我的域名是“www.xyz.site”在webhost上,在MySQL中我有一个数据库,其中有一个名为“users”的表,其中包含一个名为“amount”的列。在我的Android应用程序的一个活动“Payment1Activity.java”中,我想从服务器获取该值并从中扣除一些特定的数量,这是我的一个xml文件“perryroad.xml”中的textview并保存新的金额到表“用户”的“金额”列。 我的活动Payment1Activity.java如下:

package com.example.streetsystemparking;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.RemoteViews;
//import com.example.streetsystemparking.MainActivity; 


public class Payment1Activity extends Activity {
Button b,br1;
EditText et,pass;
TextView tv;
HttpPost httppost;
StringBuffer buffer;
HttpResponse response;
HttpClient httpclient;
List<NameValuePair> nameValuePairs;
ProgressDialog dialog = null;
String status;
String uid;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_payment1);
    b = (Button)findViewById(R.id.Button01);  
    et = (EditText)findViewById(R.id.accountno);
    pass= (EditText)findViewById(R.id.password);
   // tv = (TextView)findViewById(R.id.tv);

    b.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View v) {

            dialog = ProgressDialog.show(Payment1Activity.this, "", 
                    "Validating user...", true);
             new Thread(new Runnable() {
                    public void run() {
                        payment();                        
                    }
                  }).start();               
        }
    });
 }

void payment(){
try{            

httpclient=new DefaultHttpClient();
httppost= new HttpPost("http://tanushreedutta.site40.net/payment_new/check.php");
        //add your data
nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("accno",et.getText().toString().trim()));                                         
    nameValuePairs.add(new BasicNameValuePair("bpassword",
                                 pass.getText().toString().trim())); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        //Execute HTTP Post Request
response=httpclient.execute(httppost);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
final String response = httpclient.execute(httppost, responseHandler);
        //System.out.println("Response : " + response); 
runOnUiThread(new Runnable() {
public void run() {
                //tv.setText("Response from PHP : " + response);
dialog.dismiss();
            }
        });
if(response.startsWith("User Found")){
            new Thread(new Runnable() {
                public void run() {

                    update();                         
                }

              }).start();   

    runOnUiThread(new Runnable() {
    public void run() {
        //Here I want to take that amount from mysql table and subtract the textview          
          (taken from perryroad.xml) value from it and store that new value back to                
          mysql table.                      
        Toast.makeText(Payment1Activity.this,"Payment Successful for block 1", 
                      Toast.LENGTH_SHORT).show();
Toast.makeText(Payment1Activity.this,"You reserved block 
                          1",Toast.LENGTH_LONG).show();

                    setResult(1); 
                }
            });
startActivity(new Intent (Payment1Activity.this,VacatingCredentials.class));


        }else{
            showAlert();        
        }

    }catch(Exception e){
        dialog.dismiss();
        System.out.println("Exception : " + e.getMessage());
    }
}
 public void update()
    {
        try
        {
        uid="1";
    status="2";
    HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://tanushreedutta.site40.net/map/map.php");
            nameValuePairs = new ArrayList<NameValuePair>(2);

            nameValuePairs.add(new BasicNameValuePair("uid",uid));
            nameValuePairs.add(new BasicNameValuePair("status",status));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            response = httpclient.execute(httppost); 
           ResponseHandler<String> responseHandler = new BasicResponseHandler();
    final String response = httpclient.execute(httppost, responseHandler);
           // HttpEntity entity = response.getEntity();
           // is = entity.getContent();
            Log.e("pass 1", "connection success ");
        }
        catch(Exception e)
        {
            Log.e("Fail 1", e.toString());
            Toast.makeText(getApplicationContext(), "Invalid IP Address",
            Toast.LENGTH_LONG).show();
        }     
    }
public void showAlert(){
    Payment1Activity.this.runOnUiThread(new Runnable() {
        public void run() {
     AlertDialog.Builder builder = new AlertDialog.Builder(Payment1Activity.this);
       builder.setTitle("Payment Error.");
       builder.setMessage("User not Found.")  
       .setCancelable(false)
       .setPositiveButton("OK", new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int id) {
           Toast.makeText(Payment1Activity.this,"Invalid Account number or Password,Try 
                         Again",Toast.LENGTH_LONG).show();
                            }
                   });                     
            AlertDialog alert = builder.create();
            alert.show();               
        }
    });
   }

    }

我的perryroad.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/p5" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="40dp"
    android:text="Address: Perry Road, Bandra" 
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="103dp"
    android:orientation="horizontal"
    android:text="West, Mumbai"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 <TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
     android:layout_marginTop="25dp"
    android:layout_marginLeft="10dp"
    android:orientation="horizontal"
    android:text="Parking charges: Rs."
    android:textAppearance="?android:attr/textAppearanceLarge" />

 <TextView
     android:id="@+id/textView4"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginLeft="220dp"
     android:orientation="horizontal"
     android:text="20"
     android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
    android:id="@+id/b1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText1"
    android:layout_gravity="center"
    android:orientation="horizontal"
    android:layout_marginTop="50dp"
    android:text="Get Direction"
    android:textColor="#000000"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
    android:id="@+id/b2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:text="Get Map"
    android:layout_gravity="center"
     android:textColor="#000000"
    android:textAppearance="?android:attr/textAppearanceLarge" />

  </LinearLayout>

我想通过getText()从这个textview4访问“20”,那么它的语法是什么? 谁能帮我这个 ?任何建议或建议将受到高度赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

实现此功能的方法很少,这取决于您的专业水平和您希望获得的数据类型。我会给你几个基本步骤,但你需要实现一些东西并试一试。

客户端编码的步骤;即在你的java类中。

1。创建HttpClient

2。创建HttpGet或HttpPost并使用get或post URL初始化它。 (根据数据类型,再次获取或发布是您的选择)

3。执行你的get / post对象,你将把响应作为HttpResponse的对象

4。然后,您可以使用缓冲区读取器,字符串构建器,输入流等的概念来获取所需的数据。

服务器端代码的步骤,即服务器上的php文件

- 您可以使用XML,JSON或任何其他已经定义的方法来获取数据,您必须正确编码JSON,然后使用JSONparser类在客户端代码上解码它类似的概念用XML

- 如果您是初学者,更容易的方法,只需尝试使用mysql查询从服务器一次返回一行并使用&#39; echo&#39;在PHP中。使用post方法并将不同的参数传递给服务器,编写不同类型的mysql查询以获得所需的结果。一旦你与它们相处,你就可以继续使用JSON的概念了。如果您之前从未完成过JSON并且会尝试直接进行JSON,那么可能看起来有些混乱。

也请在发布问题时提及具体查询,因为这是一个非常广泛的主题,无法在一篇文章中回答。

编辑:不要忘记在清单文件中指定使用互联网的权限,并使用AsynkTask和线程来执行耗时的任务

编辑2 根据您的评论,您想要为某个用户访问一个列值,是不是?例如,你有5列; ID,姓名,密码,金额,您只想检索特定用户的金额。如果这是你正在寻找的,那么你需要编写一个mysql查询,这样它只返回特定行的列值(这需要在你的php中的服务器端完成)或者你只能获取你的列值需要从JSON响应中获取它的id(这需要在解析JSON响应时在客户端完成)

我写了一个答案here on stakoverflow,这是一个基本的例子。如果你看一下我的例子,我会在JSON响应中检索名字和姓氏(来自php中的服务器),但在解析JSON对象时,我只能通过其id&#39;姓氏&#39;来获取姓氏。 (在JSON解析器代码的客户端)。

请记住,这只是一个示例,如果您拥有大型数据库,并且每次检索所有数据都会增加互联网使用量,并且通过慢速互联网连接也会耗费大量时间。专业应用程序的最佳方法是使用只返回必要值的mysql查询编写单独的php文件。

我也不明白你的问题中你最后2-3行是什么意思,请你详细说明(代码后的问题)。

PS:在开发Android应用程序时使用AsyncTask也是一个很好的做法,因为它们是android的专用线程机制。

如果我的回答对你有帮助,请提前投票。