【问题标题】:Getting data from PHP in Android在 Android 中从 PHP 获取数据
【发布时间】:2012-06-10 10:21:41
【问题描述】:

我已经看过几个关于这方面的教程,但它们都比在主线程中阻止网络调用的 Android 更新更老。我尝试将调用它的代码移动到 RetrieveFeedTask,但这对我没有帮助,因为我无法在我的主线程中获取数据。这是我所做的:

class RetrieveFeedTask extends AsyncTask <String, Void, String>
{

    private Exception exception;

    private String doInBackground()
    {
        String returnString = "sample";

         ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        //http post
        try{
             HttpClient httpclient = new DefaultHttpClient();
             HttpPost httppost = new HttpPost("http://localhost/sample_array.php");
             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
             HttpResponse response = httpclient.execute(httppost);
             HttpEntity entity = response.getEntity();
             is = entity.getContent();
             }catch(Exception e){
                 Log.e("log_tag", "Error in http connection"+e.toString());
            }
        //convert response to string
        try{
              BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
               sb = new StringBuilder();
               sb.append(reader.readLine() + "\n");

               String line="0";
               while ((line = reader.readLine()) != null) {
                              sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
                }catch(Exception e){
                      Log.e("log_tag", "Error converting result "+e.toString());
                }
        //paring data
        int step_num;
        String description;
        try{
              jArray = new JSONArray(result);
              JSONObject json_data=null;
              for(int i=0;i<jArray.length();i++){
                     json_data = jArray.getJSONObject(i);
                     step_num=json_data.getInt("step_num");
                     description=json_data.getString("description");
                 }
              }
              catch(JSONException e1){
                  Toast.makeText(getBaseContext(), "No step found" ,Toast.LENGTH_LONG).show();
              } catch (ParseException e1) {
                    e1.printStackTrace();
            }

        //System.out.println(result);
        return result;
    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        return null;
    }

}

然后在主线程中,我这样做了:

AsyncTask<String, Void, String> returnString = new RetrieveFeedTask().execute();

那么我如何获取这些信息以在主线程中使用?

【问题讨论】:

    标签: java android


    【解决方案1】:

    您几乎可以接受,但有 2 个错误:

    1. 您正在重载永远无法调用的 doInBackground 方法。
    2. 在“当前”为空的 doInBackground 实现中实现您的内容。

    如果您想在主线程中恢复数据,您可以:

    1. 使用runOnUiThread方法
    2. 在您的活动中创建一个Anonymous Inner Class,它将扩展您的异步任务并覆盖onPostExecute 方法。 (在 ui 线程上运行)

    :)

    【讨论】:

      【解决方案2】:

      您可以创建一个以 JSON 格式返回所需数据的 Web 服务。把它放到你的服务器上。 现在使用 android 调用该网络服务。这样就可以从 PHP 获取数据到 android

      【讨论】:

        【解决方案3】:

        在空的 doInBackground 块中实现您当前的代码

         @Override
        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub
            return null;
        }
        

        上面方法的返回字符串,会在onPostExecute方法中接收,你也需要在你的代码中实现,目前实际上是缺少的。

        【讨论】:

          猜你喜欢
          • 2013-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-25
          • 2012-01-22
          • 2013-08-16
          • 1970-01-01
          相关资源
          最近更新 更多