EditText没有获得一致的android数据

时间:2014-03-07 07:26:29

标签: android android-edittext

我正在使用EditText获取用户输入以创建停车场对象。编辑文本是具有所有重要信息的用户输入。然后我将这些信息添加到cloudmine数据库中。但编辑文本不会一致地解析输入。我在cloudmine上检查它,它经常显示为null。不知道为什么?

以下是代码段

private String name;
private String address;
private String pricing;
private String hours;
private String latitude;
private String longitude;




public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);//calling parent constructor
    setContentView(R.layout.addparking_layout);//setting up the GUI

    findViewById(R.id.LotName).setOnKeyListener(this);
    findViewById(R.id.LotAddress).setOnKeyListener(this);
    findViewById(R.id.LotPricing).setOnKeyListener(this);
    findViewById(R.id.LotHours).setOnKeyListener(this);
    findViewById(R.id.LotLat).setOnKeyListener(this);
    findViewById(R.id.LotLon).setOnKeyListener(this);

}

public void addParkingLot(View v)
{
    new createCloudmineLot().execute();
}


@Override
public boolean onKey(View v, int keyCode, KeyEvent event) 
{
    // TODO Auto-generated method stub
    System.out.println("Inside the onKey method");
    EditText temp = (EditText) v;
    System.out.println("Text: "+ temp.getText());
    //getting the text for the appropriate info
    if(temp.getId() == R.id.LotName)
    {
        name = "" + temp.getText();
        System.out.println("name: "+name);
    }
    else
        if(temp.getId() == R.id.LotAddress)
        {
            address = "" + temp.getText();
            System.out.println("address: "+ address);
        }
        else
            if(temp.getId() == R.id.LotPricing)
            {
                pricing = "" + temp.getText();
                System.out.println("pricing: "+pricing);
            }
            else
                if(temp.getId() == R.id.LotHours)
                {
                    hours = "" + temp.getText();
                    System.out.println("hours: "+hours);
                }
                else
                    if(temp.getId() == R.id.LotLat)
                    {
                        latitude = "" + temp.getText();
                        System.out.println("latitude: "+latitude);
                    }
                    else
                        if(temp.getId() == R.id.LotLon)
                        {
                            longitude = "" + temp.getText();
                                System.out.println("longitude: "+longitude);
                        }

    return false;
}

public class createCloudmineLot extends AsyncTask<Void,Void,Void>
{
    private boolean success = false;
    @Override
    protected Void doInBackground(Void... params)
    {
        // TODO Auto-generated method stub
         CMApiCredentials.initialize(APP_ID, API_KEY,  getApplicationContext());//initializing Cloudmine connetion
         SimpleCMObject parkingLot = new SimpleCMObject();

         parkingLot.add("name", name);
         parkingLot.add("address",address);
         parkingLot.add("pricing",pricing);
         parkingLot.add("hours",hours);
         parkingLot.add("latitude",latitude);
         parkingLot.add("longitude",longitude);

         parkingLot.save(new ObjectModificationResponseCallback() 
         {
                public void onCompletion(ObjectModificationResponse response) 
                {
                    success = response.wasSuccess();
                    Toast.makeText(AddParking.this, "Parking Lot was added:" + success,Toast.LENGTH_LONG).show();
                }
         });

        return null;
    }//end of doBackground

}//end on AsyncTask

}

1 个答案:

答案 0 :(得分:0)

我想用你的代码指出一些可能有问题的东西。虽然这不是一个具体的答案,但我认为它将解决您的问题并帮助您解决问题。其中一个甚至可能是主要问题。

首先考虑你的'onKey'方法。你有什么关键的反应?您没有处理'event'或'keyCode'。将在所有按键,包括字母上调用该方法。我怀疑'null'值来自用户推送任何非字符键。

我建议您更改代码以对例如仅输入密钥

做出反应
if(keyCode == KeyEvent.KEYCODE_ENTER)

现在您可以确定用户点击了输入键,这通常意味着他输入了一些有意义的内容。

我还建议降低代码的复杂性。这很难读。我建议使用'switch'语句。

switch(temp.getId())
{    
    case(R.id.LotName):
        // Your code here
        break;
    case(R.id.nextEditTextID):
        // etc
}

这将使您的代码更易于阅读,并且不太可能发生错误。