【发布时间】:2011-11-28 02:40:41
【问题描述】:
我正在使用 CustomHttpClient 连接我的 Android 应用程序并进行查询。我想知道是否可以从 php/mysql 查询中填充微调器,如果可以,如何完成?
【问题讨论】:
我正在使用 CustomHttpClient 连接我的 Android 应用程序并进行查询。我想知道是否可以从 php/mysql 查询中填充微调器,如果可以,如何完成?
【问题讨论】:
所以这实际上应该相当容易。在实现细节方面,您并没有真正给我们太多工作,所以我会尽力为您编写半伪代码并给您一个很好的一般性答案。
我们希望从一个单独的线程进行查询,以免在等待网络响应时阻塞 UI 线程。您可以通过多种不同的方式执行此操作,包括使用 AsyncTask、IntentService 或某种加载器。我认为在您的情况下,从 AsyncTaskLoader 类派生的自定义类将是最好的。因此,让我们看看它的外观(注意,您需要访问一些较新的 api 才能使用加载程序,如果您正在为低于 api 级别 11 的任何内容编写此应用程序,请查看http://developer.android.com/resources/articles/backward-compatibility.html)。
MyActivity extends Activity implements LoaderManager.LoaderCallbacks<List<SpinnerItem>>{
private Adapter<SpinnerItem> spinnerAdapter;
private static final int SPINNER_LOADER_ID = 0;
public void onCreate(Bundle icicle){
Spinner theSpinner = findViewById(R.id.the_spinner);
spinnerAdapater = new Adapter<SpinnerItem>(...); //create empty adapter
spinnerAdapater.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
theSpinner.setAdapter(spinnerAdapater);
getLoaderManager().initLoader(SPINNER_LOADER_ID, null, this);
}
public Loader<List<SpinnerItems>> onCreateLoader(int id, Bundle arg){
//Create and return your loader
}
public void onLoadFinish(Loader<List<SpinnerItem>> loader, List<SpinnerItem> data){
//update your adapater with the new data
}
public void onLoaderReset(Loader<List<SpinnerItem>> loader){
//clear out all the data in the adapter
}
}
这里的所有内容都很简单。您应该能够通过阅读 Android 开发页面上的加载器、适配器等来填补空白。我们使用一个充满“SpinnerItem”的“列表”这一事实当然取决于您的特定实现,您选择使用的适配器类型也是如此。随意选择您想要的任何实际数据结构。再次,请参阅 Android 开发页面了解详细信息。就加载器类而言,你会想要做这样的事情:
MyNetworkLoader extends AsyncTaskLoader<List<SpinnerItem>>
public MyNetworkLoader(Context context){
super(context);
}
List<SpinnerItem> loadInBackground(){
//Get data from server
}
}
在 loadInBackground 方法中,您将使用 CustomHttpClient 查询服务器并将响应转换为某种数据结构(就像之前一样,在本示例中,我们使用“SpinnerItem”的“列表”)。
最后一点,在您的网络请求完成之前,您的微调器将是空的。您可能希望包含某种逻辑,通知用户正在加载微调器的内容。
就是这样。新的加载器 API 让事情变得非常简单。
【讨论】:
是的,这是可能的。使用 php/mysql 查询检索项目列表,然后使用适配器将这些项目提供给微调器。这个问题提供了一个如何编写 SpinnerAdapter 的示例:How to correctly overwrite methods of SpinnerAdapter
【讨论】: