我有一个PHP
web服务,并正在查询它以填充用户界面。我有一个问题,JSONObject json = jParser.makeHttpRequest(url, "GET",params);
忽略了传递给它的URL,而是对最后使用的PHP URL运行查询。
我的web服务是这个和这个
要复制此操作,在editext1中搜索'EF'并按下按钮。然后,从edittext1的末尾删除'F'。LayoutSpinner将填满101个'Civic' 'Hatch' 'Civic' 'Hatch'条目,因为它查询的是test.php web服务,而不是menuitems.php。
URL字符串由setOnItemSelectedListener
设置,当任何旋转控件更改时触发。然后,它触发后台任务LoadAllProducts来查询web服务。我已经确认当jParser.makeHttpRequest(url, "GET",params)
行通过使用断点和观察变量运行时,URL字符串指向menuitems.php。其他人以前遇到过这个问题吗?我应该走什么路线来解决它?
任何帮助都将是非常感激的。
下面是我的代码: // view products click event
btnViewProducts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
// Execute LoadAllProducts
url = "http://www.jankuyado.com/Components/test.php";
new LoadAllProducts().execute();
}
// listener for EditText1 changes.
@Override
public void afterTextChanged(Editable s) {
chassiscode = v.getText().toString(); //put the chassiscode into a global variable.
url = "http://www.jankuyado.com/Components/menuitems.php";
new LoadAllProducts().execute();
}
class LoadAllProducts extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("chassiscode",chassiscode));
params.add(new BasicNameValuePair("Civic", model));
params.add(new BasicNameValuePair("layout", layout));
// Creating JSON Parser object
JSONParser jParser = new JSONParser();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url, "GET",params);
products = json.getJSONArray("components");
productslist.clear(); //clear the productslist and start from scratch.
// looping through All Products
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
if(url == "http://www.jankuyado.com/Components/test.php") {
//if components are being retrieved
// adding HashList to ArrayList
productslist.add(c.getString("ComponentName"));
} else if (url == "http://www.jankuyado.com/Components/menuitems.php") {
//else if menu items are being retrieved.
// Storing each json item in the productslist
if (c.has("model")) {
MenuReturnType = "model"; //flag global variable MenuReturnType as returning car Models (used later when parsing the Productlist).
productslist.add(c.getString("model"));
}
if (c.has("layout")) {
MenuReturnType = "layout"; //flag global variable MenuReturnType as returning car Layouts (used later when parsing the Productlist).
productslist.add(c.getString("layout"));
}
}
}
}
return null;
}
protected void onPostExecute(String file_url) {
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
//stuff that updates ui here
已解决。
JSONParser类在某些条件下从.php查询中获得一些垃圾数据。当由于某种原因发生这种情况时,JSONParser返回最后一个成功的JSON查询输出,而不是null。一旦我解决了这个问题,并使我的代码处理一个空JSONArray返回一切正常工作。