标签: android-asynctask

警报对话框和ASync任务

我试图在活动中使用警报对话框和异步任务,并收到以下错误

引起:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序

码:

public class loginTask extends AsyncTask<Void, Void, Void> {
    public ProgressDialog loginDialog = new ProgressDialog(
            LoginActivity.this);

    @Override
    protected void onPreExecute() {
        loginDialog.setMessage("Please wait Logging in");
        loginDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {

        if(loginUser()) {
            loginDialog.dismiss();
            alertbox("title", "winnn", "Okay");
        } else {
            loginDialog.dismiss();
            alertbox("title", "message", "Okay");
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void unused) {
        loginDialog.dismiss();
        Intent intentHome = new Intent(LoginActivity.this,
                HomeActivity.class);
        startActivity(intentHome);
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-asynctask android-alertdialog

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

android使用异步http连接来获取图像位图

我正在尝试使用异步请求从URL中获取图像,以防止URL挂起.这是我正在使用的代码片段

private void setImg(final ImageView im, String url){
    AsyncHttpClient client = new AsyncHttpClient();
    client.get(url, new AsyncHttpResponseHandler(){
        public void onSuccess(String response){
            try{
                byte[] imageAsBytes = response.getBytes();
                im.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length));
                im.refreshDrawableState();
            } catch(Throwable e){
                e.printStackTrace();
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这总是在logcat中显示此警告

12-29 01:55:33.043: D/skia(14414): --- SkImageDecoder::Factory returned null

我找不到合适的理由.有帮助吗?

android bitmap android-imageview android-asynctask

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

我正在使用AsyncTask来执行长时间运行的任务,但它似乎仍然在主ui中执行

我正在尝试编写一个测试应用程序来压缩和解压缩文件.我找到了一个用于进行文件压缩/解压缩的开源库,但是你可以猜测这确实需要一段时间,因此我无法在主ui中运行它所以我以为我会使用AsyncTask在后台线程上进行繁重的工作,然后只是呕吐开始,一个完成的消息,一切都会没事的.但我在这里遇到两个大问题.当我点击按钮时,它确实会解压缩文件,但它似乎是在主ui而不是在后台线程中执行它,因为应用程序将锁定并且我确实得到了anr屏幕,而且我正在注意任何新的线程确实使用ddms视图出现,我没有看到任何.如果我告诉它我想等待它将解压缩文件.但是我当然不希望程序出现冻结或者对我不利另一个问题是我已将它设置为在点击后立即更新按钮文本,然后在aysc任务完成时再次更新但是我不知道看看是否发生了变化,我确实改变了文本,以便它们在所有不同的地方,所以我可以告诉.它也应该在状态消息中设置一个文本字段.我认为onPostExecute永远不会被调用.谁能告诉我这里发生了什么?

package net.pawworks.sandbox.svc;

import java.io.File;
import net.pawworks.utils.mainlib.filetools;
import net.pawworks.utils.mainlib.zipper;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class TestserviceActivity extends Activity {
    /** Called when the activity is first created. */
    String readpath= filetools.sdcardpath()+"/ziptestin/";
    TextView readstatus;
    Button readbut;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ziptest);
        File setup = new File(filetools.sdcardpath()+"/ziptestout");
        setup.mkdir();
        setup = new File(filetools.sdcardpath()+"/ziptestin/");
        setup.mkdir();
        readstatus = (TextView)findViewById(R.id.readstatus);
        readbut = (Button)findViewById(R.id.readit);
        readbut.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v)
            {
                readbut.setText("Loading.....");
                String …
Run Code Online (Sandbox Code Playgroud)

user-interface multithreading android android-asynctask android-anr-dialog

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

如何在Android中的异步类中显示FTP下载中的进度条?

如何在android中的异步类中显示FTP下载中的进度条?

我尝试了很多东西,但没有得到进度条.这是我的代码,我从其他Activity调用此类将该活动的上下文传递给此类.

package com.scft;

import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPDataTransferListener;

import java.io.File;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.StrictMode;
import android.util.Log;
import android.widget.PopupWindow;
import android.widget.Toast;

public class ftpdownload_class {

    static final String FTP_HOST= "**************";

    /*********  FTP USERNAME ***********/
    static final String FTP_USER = "*********";

    /*********  FTP PASSWORD ***********/
    static final String FTP_PASS  ="*******";
      File fileDownload=null;
      long startTime_ftpDownload=0;
      long endTime_ftpDownload=0;
      long downloaded_file=0;
      long startTime_ftpUpload=0;

      long endTime_ftpUpload=0;
      FTPClient client=null;
        public static File m_fileName;
        private PopupWindow pwindo;
       String  totaltime_ftpUpload,filesize_ftpUpload,ratevalue_ftpUpload,totaltime_ftpDownload,filesize_ftpDownload,ratevalue_ftp_download;
      Context mContext=null;
      public ftpdownload_class( Context …
Run Code Online (Sandbox Code Playgroud)

ftp android android-progressbar android-asynctask

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

如何在android中实现块

In IOS we use blocks when we want to handle an action when a particular situation occur.

在android中有没有这样的方法来处理onCompletion的情况,我们可以添加它在哪里.

AsyncTask方法一样,它知道工作何时完成.它执行onPostExecute.当特定情况到达时我们如何创建这种类型的方法,我们就像处理它一样.

今天我找到了一种在IOS中表现得像Block的方式

BaseAsyncTask(new Callback(){

onPostResult(string result)
{
// do whatever you want to do with the result got from asynctaks
}
});
Run Code Online (Sandbox Code Playgroud)

它是一个委托,它在达到特定情况时调用..

我是正确的,上面的代码是我们在IOS中的块中的块.或者在android中有任何其他创建块的方法.

android block ios android-asynctask

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

循环AsyncTask类必须声明为abstract或实现抽象方法

我试图遍历我的表中的一些记录,并为每个记录,使用值作为参数;

  1. 获取一个网页来解析一些HTML
  2. 获取一些JSON数据来解析并从中获取几个值

这些都可以完美地完成,但我无法让它们都在AsyncTask中工作.我这里有代码.我知道我可能已经离开了,但是如果有人能给我一个关于我的想法如何消失的推动,我真的很感激.

在第一行

    private class FetchWebsiteData extends AsyncTask<Void, String, Void> {
Run Code Online (Sandbox Code Playgroud)

我明白了

Class FetchWebsiteData must either be declared abstract or implement abstract method doInBackground(params...) in 'AsynTask' 
Run Code Online (Sandbox Code Playgroud)

作为错误消息并以红色下划线.

private class FetchWebsiteData extends AsyncTask<Void, String, Void> {


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(summary.this);
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }


    protected String doInBackground(String urls3, String result3) {

        helper = new TaskDBHelper(summary.this);
        SQLiteDatabase sqlDB = helper.getReadableDatabase();

        Cursor dataCount = sqlDB.rawQuery("select TASK from " + TaskContract.TABLE, null);
        ArrayList<String> temp = new …
Run Code Online (Sandbox Code Playgroud)

java android android-asynctask

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

在AsyncTask doInBackground中创建140,000行的SQLite数据库需要花费很多分钟

我上周才处理过SQLite数据库.我很久以前曾经处理过SQL,但我仍然有它的要点.

下面的代码从asset命名中读取140,000个单词dictionary.dic,并将每个单词与其一起插入SQLite数据库status.我的期望是它需要很长一段时间,但是在7英寸平板电脑上只需要25分钟,但仍然没有接近完成(在P).

我应该说,"嘿,这是一百万分之一行.这需要一段时间." 但我可以阅读所有140,000个单词ArrayList<String>在30秒内.我意识到创建数据库有很多开销,但很多很多分钟?

我应该说,"好吧,想想如果不使用需要多长时间AsyncTask"并接受它,因为这是一次性的任务?但这真是令人讨厌,花了这么长时间.这是令人不快的.

我应该说,"你为什么要使用Scanner?难怪它花了这么长时间?" 并做一些其他asset访问?或者这不是真正的问题吗?

我也没用过AsyncTask.我在滥用doInBackground吗?我在那里有很多代码; 并非所有人都必须去那里,但循环就是这样,而且还有挂断.

使用database.Insert,这被称为"便利方法",是什么导致挂断?我应该使用Cursor和吗?query不是吗?我不完全确定我是怎么做到的.从Deitel的"地址簿"应用程序"Android for Programmers - App Driven ..."中得到了我的想法,但他的数据库一开始就是空的.

我已经充分考虑了这个问题.我只需要有经验的人来看看并说:"好吧,这就是你的问题." 我无法证明在没有任何关于是否有任何帮助的指导下重新开始重做我想到的所有事情.

public class DatabaseConnector //extends ArrayList<String>
{
  public static Cursor cursor ;
  Scanner scDict;
  InputStream stream = null;
  Context mContext;
  AssetManager mAssets;

  public static final String DATABASE_NAME      = "Dictionary";
  public static final String TABLE_NAME         = "wordlist";
  public …
Run Code Online (Sandbox Code Playgroud)

java sqlite android android-asynctask

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

如何将字符串从AsyncTask返回到另一个活动

我已经创建了一个类并使用AsyncTask进行了扩展,现在我想向我返回一个字符串以将另一个类抛出该活动。它从mysql mDatabase获取jsonstring

enter code here  

public class GetJson  extends AsyncTask<Void,Void,String> {
String  JSON_STRING;
String json_url;
public String pasString;
Activity ab;
@Override
protected void onPreExecute() {
    json_url="https://XXXXXXX.000webhostapp.com/Json_getData_Survey.php";
}

public GetJson(Activity b) {
    ab=b;
}

@Override
protected String doInBackground(Void... params) {

    try {
        URL url =new URL(json_url);
        HttpURLConnection httpURLConnection =(HttpURLConnection)  url.openConnection();
        InputStream inputStream  =httpURLConnection.getInputStream();
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder stringBuilder=new StringBuilder();

        while ((JSON_STRING=bufferedReader.readLine())!=null)
        {

            stringBuilder.append(JSON_STRING+"\n");
        }


        bufferedReader.close();
        inputStream.close();
        httpURLConnection.disconnect();

        String  strings =stringBuilder.toString().trim();
        return  strings;

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch …
Run Code Online (Sandbox Code Playgroud)

java android android-asynctask

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

如何在React Native中获取数据之前呈现加载器

我通过异步请求获取数据.我知道在显示数据之前我需要等待api请求完成.不幸的是,我不确定如何创建一个加载器来等待数据加载.我是新的反应,所以如果我也可以得到实现它的帮助,那将是太棒了!这是我目前的代码:

import React, { Component, PropTypes } from 'react';
import { View, Text, ListView, StyleSheet, TouchableHighlight} from 'react- native';
import Header from '../Components/Header';
import Api from '../Utility/Api';


export default class CalendarPage extends Component {

constructor(props) {
super(props);
}

async componentWillMount() { this.setState(
    {data: await Api.getDates()},

    )
}

  render() {
    return (
      <View style={{flex: 1}}>
        <Header pageName="Calendar" navigator={this.props.navigator}/>
        <View style = {{flex:9}}>
            <View>
              { this.state.data.days[0].items.map((item) => (
                <View>
                  <Text>{item.summary}</Text>
                  <Text>{item.start.dateTime}</Text>
                  <Text>{item.description}</Text>
                </View>
              ))}
            </View>
         </View>
      </View>
    );
  }
Run Code Online (Sandbox Code Playgroud)

}

javascript jsx android-asynctask react-native

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

如何更快地提出OkHttp请求?

我发出POST请求以保护服务器,这需要相当长的时间.我想让它更快.有机会这样做吗?它看起来像这样:

  private class GetTokenTask extends AsyncTask<Void, Void, String> {

    private final String LOG_TAG = MainActivity.class.getSimpleName();

    private Call mCallToServer;
    private String mAccessToken;
    private OkHttpClient mHttpClient;
    private JSONObject mResponseJSON;
    private Response mResponseFromServer;

    @Override
    protected String doInBackground(Void... params) {
      mHttpClient = new OkHttpClient();

      mCallToServer = mHttpClient.newCall(requestToOAuth());
      try {
        mResponseFromServer = mCallToServer.execute();
        mResponseJSON = new JSONObject(mResponseFromServer.body().string());
        mAccessToken = mResponseJSON.getString(getString(R.string.access_token_key));

        Log.i(LOG_TAG, mAccessToken);
        Log.i(LOG_TAG, JWTUtils.decoded(mAccessToken));
      } catch (Exception e) {
        e.printStackTrace();
      }
      return mAccessToken;
    }

    @Override
    protected void onPostExecute(String token) {
      super.onPostExecute(token);
    }
  } …
Run Code Online (Sandbox Code Playgroud)

post android android-asynctask okhttp

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