【发布时间】:2015-02-05 05:45:13
【问题描述】:
我正在尝试使用 Android Eclipse 制作一个项目,但我是新手。
这是我的问题:
我有一个表,其列是 id、service_name、price、detail。我已经知道如何从 Spinner 获取数据。
我想问一下,在选择 Spinner 时,我将如何查询数据并将其显示到我的 TextView 中,即 txtPrice 和 txtDetail。
这是我从 androidhive.info 获得的代码,谢谢!
public class TransactionActivity extends Activity implements OnItemSelectedListener {
private Button btnAddNewService;
//private TextView txtService;
private Spinner spinnerService;
// array list for spinner adapter
private ArrayList<ServiceList> servicesList;
ProgressDialog pDialog;
// API urls
// Url to create new category
private String URL_NEW_CATEGORY = "http://localhost/food_api/new_category.php";
// Url to get all categories
private String URL_CATEGORIES = "http://localhost/FlawlessAdmin/storescripts/create_transaction/get_service.php";
////////////////////////////////
private EditText editTextService;
List<String> listService=new ArrayList<String>();
////////////////////////////////
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transaction);
btnAddNewService = (Button) findViewById(R.id.btnTransact);
spinnerService = (Spinner) findViewById(R.id.spinService);
editTextService = (EditText) findViewById(R.id.txtService);
servicesList = new ArrayList<ServiceList>();
// spinner item select listener
spinnerService.setOnItemSelectedListener(this);
editTextService=(EditText) findViewById(R.id.txtService);
// Add new Service click event
btnAddNewService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (editTextService.getText().toString().trim().length() > 0) {
// new category name
String newService = editTextService.getText().toString();
// Call Async task to create new category
new AddNewService().execute(newService);
} else {
Toast.makeText(getApplicationContext(),
"Please enter service name", Toast.LENGTH_SHORT)
.show();
}
}
});
new GetCategories().execute();
}
/**
* Adding spinner data
* */
private void populateSpinner() {
List<String> lables = new ArrayList<String>();
editTextService.setText("");
for (int i = 0; i < servicesList.size(); i++) {
lables.add(servicesList.get(i).getName());
}
// Creating adapter for spinner
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, lables);
// Drop down layout style - list view with radio button
spinnerAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
spinnerService.setAdapter(spinnerAdapter);
//////////////Copying from spinner to EditText
listService.addAll(lables);
}
/**
* Async task to get all food categories
* */
private class GetCategories extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(TransactionActivity.this);
pDialog.setMessage("Fetching service categories..");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
ServiceHandler jsonParser = new ServiceHandler();
String json = jsonParser.makeServiceCall(URL_CATEGORIES, ServiceHandler.GET);
Log.e("Response: ", "> " + json);
if (json != null) {
try {
JSONObject jsonObj = new JSONObject(json);
if (jsonObj != null) {
JSONArray categories = jsonObj
.getJSONArray("services");
for (int i = 0; i < categories.length(); i++) {
JSONObject catObj = (JSONObject) categories.get(i);
ServiceList cat = new ServiceList(catObj.getInt("id"),
catObj.getString("service_name"));
servicesList.add(cat);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("JSON Data", "Didn't receive any data from server!");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
populateSpinner();
}
}
/**
* Async task to create a new food category
* */
private class AddNewService extends AsyncTask<String, Void, Void> {
boolean isNewCategoryCreated = false;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(TransactionActivity.this);
pDialog.setMessage("Creating new services..");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(String... arg) {
String newCategory = arg[0];
// Preparing post params
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", newCategory));
ServiceHandler serviceClient = new ServiceHandler();
String json = serviceClient.makeServiceCall(URL_NEW_CATEGORY,
ServiceHandler.POST, params);
Log.d("Create Response: ", "> " + json);
if (json != null) {
try {
JSONObject jsonObj = new JSONObject(json);
boolean error = jsonObj.getBoolean("error");
// checking for error node in json
if (!error) {
// new category created successfully
isNewCategoryCreated = true;
} else {
Log.e("Create Category Error: ", "> " + jsonObj.getString("message"));
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("JSON Data", "Didn't receive any data from server!");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
if (isNewCategoryCreated) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// fetching all categories
new GetCategories().execute();
}
});
}
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
/////////////////////////////////////
String strAge=listService.get(position).toString();
editTextService.setText(strAge);
/////////////////////////////////////
Toast.makeText(
getApplicationContext(),
parent.getItemAtPosition(position).toString() + " Selected" ,
Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}}
我知道我提供的代码没有价格和细节的参考。我的表的列是 id、service_name、price 和 detail。我希望我的活动有一个用于 service_name 的 Spinner,以及用于价格和详细信息的 TextView。现在,我的问题是当我选择 service_name 时,TextView 应该显示等效价格和详细信息。谢谢。感谢您的帮助!
公共类服务列表{
private int id;
private String name;
public ServiceList(){}
public ServiceList(int id, String name){
this.id = id;
this.name = name;
}
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public int getId(){
return this.id;
}
public String getName(){
return this.name;
}
}
【问题讨论】:
-
query data into my TextView是什么意思? -
我的意思是查询并将其显示到我的 TextView 中。谢谢!
-
您的问题到底是什么?在您提供的代码中,我看不到您在哪里引用
price或detail。 -
是的,我知道我提供的代码没有价格和细节的参考。我的表的列是 id、service_name、price 和 detail。我希望我的活动有一个用于 service_name 的 Spinner,以及用于价格和详细信息的 TextView。现在,我的问题是当我选择 service_name 时,TextView 应该显示等效价格和详细信息。谢谢。
-
选择 service_name 时的当前行为是什么?
标签: android mysql textview spinner