【问题标题】:Android populate spinner from php/mysql queryAndroid 从 php/mysql 查询填充微调器
【发布时间】:2011-11-28 02:40:41
【问题描述】:

我正在使用 CustomHttpClient 连接我的 Android 应用程序并进行查询。我想知道是否可以从 php/mysql 查询中填充微调器,如果可以,如何完成?

【问题讨论】:

    标签: php android mysql spinner


    【解决方案1】:

    所以这实际上应该相当容易。在实现细节方面,您并没有真正给我们太多工作,所以我会尽力为您编写半伪代码并给您一个很好的一般性答案。

    我们希望从一个单独的线程进行查询,以免在等待网络响应时阻塞 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 让事情变得非常简单。

    【讨论】:

      【解决方案2】:

      是的,这是可能的。使用 php/mysql 查询检索项目列表,然后使用适配器将这些项目提供给微调器。这个问题提供了一个如何编写 SpinnerAdapter 的示例:How to correctly overwrite methods of SpinnerAdapter

      【讨论】:

        猜你喜欢
        • 2014-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多