当前位置: 首页 > 知识库问答 >
问题:

使用asynctask Fecting数据的progressdialog

杜元明
2023-03-14

你能帮帮我吗,我的代码在我尝试实现async任务以在我的应用程序中显示进度对话框之前运行,已经一周了,我尝试了几种解决方案但仍然是同样的问题,请有人纠正我的代码,我的代码是:

package coma.exame.dbselect;
import java.io.BufferedReader;
import java.io.IOException;
import html" target="_blank">java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.TableRow.LayoutParams;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {
    InputStream is = null;
      String result = null;
      JSONObject contact = null;

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
               Button button = (Button) findViewById(R.id.button1);
               button.setOnClickListener(new View.OnClickListener()
                  {
                        public void onClick(View view) 
                    {
                    new task().execute();

                 }
                 });
           }

    class task extends AsyncTask<String, String, String>
           {
           private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);//private ProgressDialog progressDialog = new ProgressDialog(Login.this);
           protected String doInBackground(String... params) {
                   StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);        
               try{
                       HttpClient httpclient = new DefaultHttpClient();
                       HttpPost httppost = new HttpPost("http://192.168.1.11/sqlserv/test.php");
                       HttpResponse response = httpclient.execute(httppost); 
                       HttpEntity entity = response.getEntity();
                       is = entity.getContent();
               }
               catch(Exception e)
               {
                       Log.e("log_bad_connection", "Error in http connection "+e.toString());
                      Toast.makeText(getApplicationContext(), "Tsy tafa ny connexion", Toast.LENGTH_SHORT).show();
               }
                           try
                       {
                               BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                               StringBuilder sb = new StringBuilder();
                               String line = null;
                               while ((line = reader.readLine()) != null) 
                               {
                                       sb.append(line + "\n");

                               }
                               is.close();

                               result=sb.toString();
                               return result;
                       }
                       catch(Exception e)
                       {
                              Log.e("log_conversion_resultat", "Error converting result "+e.toString());
                           Toast.makeText(getApplicationContext(), " Input reading fail", Toast.LENGTH_SHORT).show();

                       }


           }

protected void onPreExecute() {
    progressDialog.setMessage("Download data...");
    progressDialog.show();

  }

               protected void onPostExecute(String result) {

                  JSONArray jArray = new JSONArray(result);

                       TableLayout tv=(TableLayout) findViewById(R.id.table);
                       tv.removeAllViewsInLayout();

                   for(int i=-1;i<jArray.length();i++)

                               {
                                       TableRow tr = new TableRow(MainActivity.this);

                                       tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

                                      try {

                                           JSONObject json_data = jArray.getJSONObject(i);

                                   TextView b=new TextView(MainActivity.this);
                                      String stime=String.valueOf(json_data.getString("AR_REF"));
                                         b.setText(stime);
                                       b.setTextColor(Color.BLACK);
                                       b.setTextSize(6);
                                       tr.addView(b);
                                       tv.addView(tr);
                               final View vline1 = new View(MainActivity.this);
                             vline1.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1));
                             vline1.setBackgroundColor(Color.RED);
                             tv.addView(vline1);       

                                       }

                           }
                   this.progressDialog.dismiss(); 
                     }

                      catch(JSONException e)
                       {
                               Log.e("log_tag", "Error parsing data "+e.toString());
                               Toast.makeText(getApplicationContext(), "JsonArray fail", Toast.LENGTH_SHORT).show();
                       }

}

}
}

我的logcat显示错误:

05-31 12:13:09.437:I/编舞(698):跳过64帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:10.159:我/编舞(698):跳过了60帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:10.619:D/gralloc_goldfish(698):检测到没有GPU仿真的模拟器。05-31 12:13:25.900:I/编舞(698):跳过111帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:26.334:I/编舞(698):跳过35帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:26.808:I/编舞(698):跳过50帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:27.214:I/编舞(698):跳过106帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:27.413:I/编舞(698):跳过41帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:27.613:我/编舞(698):跳过了32帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:27.844:I/编舞(698):跳过58帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:28.113:I/编舞(698):跳过59帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:28.364:I/编舞(698):跳过57帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:28.634:I/编舞(698):跳过55帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:28.894:I/编舞(698):跳过62帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:29.178:I/编舞(698):跳过64帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:29.484:I/编舞(698):跳过75帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:29.754:I/编舞(698):跳过57帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:30.034:I/编舞(698):跳过35帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:30.294:I/编舞(698):跳过53帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:30.573:I/编舞(698):跳过66帧!应用程序可能在其主线程上做了太多工作。05-31 12:13:30.804:I/编舞(698):跳过53帧!应用程序可能在其主线程上做了太多工作。05-31 ...

谢谢你

共有2个答案

锺玺
2023-03-14

首先,这不是错误。这是Logcat中的一个信息,它警告您正在UI线程中执行的一些密集任务。正如我看到的,您已经为CPU密集型任务使用了Asyncask。您正在使用模拟器,跳过帧在模拟器上将是一个问题。如果跳过太多,您需要查看您在UI线程上执行的CPU密集型任务。在实际设备上测试它,它可能不会显示该警告。

宗政海
2023-03-14

可以遵循这个:

public class ReadWebpageAsyncTask extends Activity {
private TextView textView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.TextView01);
}

private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
  String response = "";
  for (String url : urls) {
    DefaultHttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    try {
      HttpResponse execute = client.execute(httpGet);
      InputStream content = execute.getEntity().getContent();

      BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
      String s = "";
      while ((s = buffer.readLine()) != null) {
        response += s;
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  return response;
}

@Override
protected void onPostExecute(String result) {
  textView.setText(result);
 }
}

public void onClick(View view) {
  DownloadWebPageTask task = new DownloadWebPageTask();
   task.execute(new String[] { "http://www.vogella.com" });

  }
} 
 类似资料:
  • SQLAlchemy 1.4 / 2.0 Tutorial 此页是 SQLAlchemy 1.4/2.0教程 . 上一页: 使用数据库元数据 |下一步: |next| 使用数据 在 处理事务和DBAPI ,我们学习了如何与Python DBAPI及其事务状态交互的基本知识。然后,在 使用数据库元数据 我们学习了如何在数据库中使用表和列表示约束 MetaData 以及相关对象。在本节中,我们将结合上

  • SQLAlchemy 1.4 / 2.0 Tutorial 此页是 SQLAlchemy 1.4/2.0教程 . 上一页: 处理事务和DBAPI |下一步: |next| 使用数据库元数据 随着引擎和SQL执行的停止,我们准备开始一些炼金术。SQLAlchemy Core和ORM的核心元素是SQL表达式语言,它允许流畅、可组合地构造SQL查询。这些查询的基础是表示数据库概念(如表和列)的Pytho

  • 我正在寻找一个选项来执行Redis BITOP使用Spring redistemplate。我试着在网上搜索一个例子,但找不到任何类似的东西。我能够从JedisStringCommands类获得bitOp函数,但不确定如何使用它。

  • 我试图训练一个数据集来预测输入的文本是否来自科幻小说。我对python比较陌生,所以我不知道我到底做错了什么。 代码: 错误:回溯(最近一次呼叫上次): 文件“”,第1行,在main()中 文件"C:/用户/用户/桌面/分配/SQL /Python/DA项目/class17.py",第36行,在主model_novels() modelêselectedModel中的文件“C:/Users/use

  • 本章节将介绍如何创建一个从数据表 country 中读取国家数据并显示出来的页面。 为了实现这个目标,你将会配置一个数据库连接, 创建一个活动记录类, 并且创建一个操作及一个视图。 贯穿整个章节,你将会学到: 配置一个数据库连接 定义一个活动记录类 使用活动记录从数据库中查询数据 以分页方式在视图中显示数据 请注意,为了掌握本章你应该具备最基本的数据库知识和使用经验。 尤其是应该知道如何创建数据库

  • 使用 JDBC 连接数据库 JAVA应用要连接到数据库,首先需要加载数据库驱动,然后获得一个数据库连接,下面是一个简单的例子: import java.sql.*; public class Test { public static void main(String[] a) throws Exception { Class.forName("org