我正在使用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
}
答案 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
}
这将使您的代码更易于阅读,并且不太可能发生错误。