标签: android-asynctask

在异步请求中使用超时回调

之前我问过这个问题,但是我打算用一个解决方案来完成这个问题并提出另一个问题.

我正在使用这个类来创建异步WebRequest:

class HttpSocket
{
    public static void MakeRequest(Uri uri, Action<RequestCallbackState> responseCallback)
    {
        WebRequest request = WebRequest.Create(uri);
        request.Proxy = null;

        Task<WebResponse> asyncTask = Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);
        ThreadPool.RegisterWaitForSingleObject((asyncTask as IAsyncResult).AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), request, 1000, true);
        asyncTask.ContinueWith(task =>
            {
                WebResponse response = task.Result;
                Stream responseStream = response.GetResponseStream();
                responseCallback(new RequestCallbackState(response.GetResponseStream()));
                responseStream.Close();
                response.Close();
            });
    }

    private static void TimeoutCallback(object state, bool timedOut)
    {
        Console.WriteLine("Timeout: " + timedOut);
        if (timedOut)
        {
            Console.WriteLine("Timeout");
            WebRequest request = (WebRequest)state;
            if (state != null)
            {
                request.Abort();
            } …
Run Code Online (Sandbox Code Playgroud)

c# android webrequest android-asynctask

0
推荐指数
1
解决办法
4950
查看次数

在没有AsyncTask的情况下运行UIthread

在我的应用程序初始化期间,我有一个任务需要大约10秒的UI线程,我决定把它放在后台线程中,并显示一个启动画面,而这正在进行..我使用AsyncTask ...但是由于AsyncTasks优先级被硬编码得如此之低,并且无法增加它我能找到的任务,任务从花费10秒钟完成到几分钟.

所以,我的问题是,如何在没有AsyncTask的情况下在NON UI线程上运行任务?到目前为止,我尝试过的所有内容似乎都在UI任务上运行,这会阻止SplashScreen在任务完成之后出现.

那么如何创建一个线程,在非UI线程上运行呢?我假设除了AsyncTask之外必须有一个选项,但到目前为止我还没有找到它......处理程序似乎只是在UI上运行,标准线程/ runnables也是如此.这必须是可能的,但我只是没有搞清楚.

multithreading android handler android-asynctask

0
推荐指数
1
解决办法
2728
查看次数

在什么条件下NetworkStream不会一次读入所有数据?

在回调中,NetworkStream.BeginRead我似乎注意到始终读取所有字节。我看到许多教程检查BytesRead是否小于总字节,如果是,请再次读取,但是似乎从来没有。

if (bytesRead < totalBytes)即使一次发送大量数据(数千个字符),并且即使缓冲区大小设置为非常小的值(大约16个),该条件也永远不会触发。

我没有使用“老式方式”进行测试,因为我正在使用Task.Factory.FromAsync而不是调用NetworkStream.BeginRead并提供一个我称为EndRead的回调。也许Tasks自动包含了直到读取完所有数据才返回的功能?我不确定。

无论哪种方式,我仍然对何时不能一次读取所有数据感到好奇。甚至需要检查是否未读取所有数据,如果需要,则再次读取?我似乎无法获得有条件运行的条件。

谢谢。

c# android networkstream stream android-asynctask

0
推荐指数
1
解决办法
1587
查看次数

AsyncTask有时会崩溃

我的主要AsyncTasks之一似乎偶尔会崩溃(进度条冻结并且进程停止)我想知道我的代码中是否有错误.

看起来当我的Galaxy S2开始耗尽电量时可能会发生这种情况 - 这似乎与亮度控制方面的一些错误相吻合.虽然这些是错误的原因还是由错误导致的,但我还是无法确定.此外,由于电池似乎总是低电量,这可能甚至没有关联!

我在AsyncTask中做的任何事情是错的吗?我实际上只是在使用处理程序执行实际计算机之前,使用AsyncTask显示三个进度条中的一个(计算机播放器).

这也是Android市场上从未报道过的.如果它是由InterruptedException引起的,我是否还应该打印堆栈跟踪,以便在我的最终用户发生用户时出现错误?

//Declaration at top level of activity
private ComputerPlayerTask mComputerPlayerTask = new ComputerPlayerTask();


// Execution of the task with a random integer value
mComputerPlayerTask = new ComputerPlayerTask();         
mComputerPlayerTask.execute(randomInt);

private class ComputerPlayerTask extends
        AsyncTask<Integer, Integer, Boolean> {

    private ProgressBar mProgressBar;


    @Override
    protected Boolean doInBackground(Integer... params) {
        int delayTime = params[0];

        mProgressBar.setMax(delayTime - 1);

        for (int i = 0; i < delayTime; i++) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                Log.e(DEBUG_TAG, "Can't sleep thread"); …
Run Code Online (Sandbox Code Playgroud)

crash android android-asynctask

0
推荐指数
1
解决办法
3556
查看次数

在AsyncTask中更改ProgressDialog的消息

我有一个在AsyncTask中运行的ProgressDialog.我试图实现,只要缓冲区的长度更大,然后说10000,来自ProgressDialog的消息就会发生变化.

有人可以帮帮我吗,这可能吗?先感谢您.

@Override
    protected void onProgressUpdate(Integer... progUpdate) { 
         if (progUpdate[0] >= 10000){ 
            progress.setMessage("Informatie wordt opgehaald...."); 
        } 
     } 
Run Code Online (Sandbox Code Playgroud)

缓冲区是在AsyncTask doInBackGround中创建的:

try { 
        HttpResponse response = httpClient.execute(request); 

        System.out.println("Response: " + response.getEntity().getContentLength());

        /******* READ CONTENT IN BUFFER *******/
        InputStream inputStreamActivity = response.getEntity().getContent();

        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStreamActivity));
        StringBuilder sb = new StringBuilder();
        String line = null;
        int count = sb.length();

        while ((line = reader.readLine()) != null) {
            sb.append(line);
             publishProgress(sb.length());

        }

        /******* CLOSE CONNECTION AND STREAM *******/
        System.out.println(sb);
        inputStreamActivity.close();
        kpn = sb.toString();

        httpClient.getConnectionManager().shutdown(); …
Run Code Online (Sandbox Code Playgroud)

android progressdialog android-asynctask

0
推荐指数
1
解决办法
8440
查看次数

Android AsyncTask对话警报

我有一个启动画面,如果服务器上有任何新内容,则会检查URL.如果show我希望向app用户显示一个AlertDialog,以便取决于用户的操作,即如果YES从服务器下载新内容并将其送到数据库,否则如果NO从服务器加载应用程序的内容.

但是,我无法在AsyncTask中使用警报对话框我的代码段如下:

protected String doInBackground(String... mode){
  /* I AM QUERY MY DATABASE FOR THE PREVIOUS CONTENT(SAY CONTENT 1, CONTENT 2);
  * then i start my connection to the server which has an xml file with the content
  * info (say content 3), at this stage .
  * i Check certain condition here,
  * say if result ==0 then i wish to display an alertdialog.
  * I used an alert dialog and i get some error. Stating use Looper or Handler. …
Run Code Online (Sandbox Code Playgroud)

android exception looper android-asynctask

0
推荐指数
1
解决办法
2357
查看次数

AsyncTast没有调用onPostExecute


这是应该执行某些操作的代码的一部分,然后调用onPostExecute事件.
出于某种原因,它没有调用它,并且在eclipse中我可以看到该方法用黄色标记(未使用的方法)...
我无法理解为什么这样...
你知道为什么吗?
谢谢!
PS:我在这里看了一些帖子,没找到我的解决方案......

    final ImageButton sync = (ImageButton) findViewById(R.id.syncChanges);
    sync.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            sync.setImageResource(R.drawable.none);
            sync.setBackgroundResource(R.drawable.animation);
            final AnimationDrawable frameAnimation =  (AnimationDrawable) sync.getBackground();
            frameAnimation.start();
             class DownloadFilesTask extends AsyncTask<String, Void, String[]> {
                 protected String[] doInBackground(String...strings) {
                    try {
                        OptionScraper.run(strings[0], Integer.parseInt(strings[1]));
                    } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return …
Run Code Online (Sandbox Code Playgroud)

java android onclick android-asynctask

0
推荐指数
1
解决办法
731
查看次数

每60秒更新一次ViewFlipper

在我的应用程序中,每60秒我从网站获得更新.我在后台使用a获取此更新AsyncTask.这是我的代码:

update = new Timer();
        update.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        updateItems();
                    }
                });
            }

        }, 30000, 60000);
Run Code Online (Sandbox Code Playgroud)

其中updateItems()方法是:

public void updateItems() {
        System.out.println("Every 60 sec getItems");
        new DownloadTask().execute();
    }
Run Code Online (Sandbox Code Playgroud)
public class DownloadTask extends AsyncTask<Void, Void, Void> {

        protected void onPostExecute(Void... args) {
            System.out.println("Download finished");
        }

        protected Void doInBackground(Void... args) {

            try {
                UpdateItems();
            } catch (Exception e1) {
                e1.printStackTrace();
            }

            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

UpdateItems() …

android viewflipper android-asynctask

0
推荐指数
1
解决办法
707
查看次数

始终获得空值异步任务

我将值传递给另一个活动,但始终为null值

public class SatelliteDirectActivity extends Activity {
private Intent intent;
private Bundle b;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    intent = new Intent(SatelliteDirectActivity.this,ClsMainActivitySatelliteDirect.class);
    b = new Bundle();
    setContentView(R.layout.initial_splash_screen);
    boolean bCheckInternetConnectivity = checkInternetConnection();
    if(!bCheckInternetConnectivity) 
    {
        Toast.makeText(this, "Please ensure that you have a internet connectivity", Toast.LENGTH_SHORT);
        finish();
    }
    else 
    {
        new GetCountryInformation().execute();

    }
    startActivity(intent);
        finish();
}
private boolean checkInternetConnection() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    // test for connection
    if (cm.getActiveNetworkInfo() != …
Run Code Online (Sandbox Code Playgroud)

android bundle android-intent android-asynctask

0
推荐指数
1
解决办法
1184
查看次数

ProgressDialog显得太晚,消失得太快

当我更新我的数据库时,我想显示一个进度对话框.我的问题是ProgressDialog出现迟到了,在4-5秒之后,然后出现并且消失的速度非常快,它在屏幕上几毫秒几乎看不到它,然后立即在列表中显示新数据.这让我觉得ProgressDialog正在等待数据库更新(它不需要花费太多,大约4.5秒)然后它会在屏幕上显示但是很快就会消失.我想立即显示ProgressDialog我按下"更新"按钮并在屏幕上停留4-5秒.

class MyAsyncTask extends AsyncTask<Void, Void, Void>{

        ProgressDialog myprogsdial;
        @Override
        protected void onPreExecute(){
            myprogsdial = ProgressDialog.show(MyActivity.this, null, "Upgrade", true);
        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub

                        RefreshDataBase();

                    }
                });

            return null;
        }

        @Override
        protected void onPostExecute(Void result){
            myprogsdial.dismiss();
        }

    }
Run Code Online (Sandbox Code Playgroud)

我打电话的时候 new MyAsyncTask().execute();

android progressdialog android-asynctask

0
推荐指数
1
解决办法
2387
查看次数