标签: android-asynctask

在ASyncTask中设置op ViewPager

我试图在ASyncTask中获取一些数据,一旦完成将数据传递给viewpager中的任何片段.但我得到以下异常:

java.lang.IllegalStateException:尚未绑定ViewPager.

我必须遵循以下代码:

OnCreateView
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        setContentView(R.layout.simple_tabs);       
        team_id = this.getIntent().getIntExtra("index", 0) + 1;
        new getTeam().execute();
    }
Run Code Online (Sandbox Code Playgroud)

的AsyncTask:

    @Override
    protected Void doInBackground(Void... arg0) {
        team = api.getTeamByID(team_id);
        return null;       
    }

@Override  
        protected void onPostExecute(Void result) {
            mAdapter = new TeamFragmentAdapter(getSupportFragmentManager());

            mPager = (ViewPager)findViewById(R.id.pager);
            mPager.setAdapter(mAdapter);

            mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
            mIndicator.setViewPager(mPager);

            progressDialog.dismiss();
        }
Run Code Online (Sandbox Code Playgroud)

TeamFragmentAdapter:

class TeamFragmentAdapter extends FragmentPagerAdapter implements TitleProvider {

        ArrayList<Fragment> fragments = new ArrayList<Fragment>();
        ArrayList<String> titels = new ArrayList<String>();

        public TeamFragmentAdapter(FragmentManager fm) {
            super(fm);
            fragments.add(new TeamInformatieFragment(team)); …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask android-viewpager

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

使用AsyncTask时出现ExceptionInInitializerError

我正在使用AsyncTask从文件中读取数据.我在运行应用程序时遇到上述错误.

错误消息是:

03-29 20:06:08.445:E/AndroidRuntime(13191):java.lang.ExceptionInInitializerError 03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app.BouncingBall.HighScore.loadFromFile( HighScore.java:81)03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app.BouncingBall.HighScore.(HighScore.java:24)03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app.BouncingBall.BouncingBallActivity $ BouncingBallView.init(BouncingBallActivity.java:185)03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app. BouncingBall.BouncingBallActivity $ BouncingBallView.run(BouncingBallActivity.java:173)03-29 20:06:08.445:E/AndroidRuntime(13191):at java.lang.Thread.run(Thread.java:1019)03-29 20: 06:08.445:E/AndroidRuntime(13191):引起:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序03-29 20:06:08.445:E/AndroidRuntime(13191 ):在android.os.Handler.(Handler.java:121)

代码

private void loadFromFile()
    {
        new AsyncDataStorage().execute(FILENAME);
    }


class AsyncDataStorage extends AsyncTask<String, Integer, Boolean> {

        protected Boolean doInBackground(String... args) {
            try {
                FileInputStream fis = context.openFileInput(FILENAME);
                byte[]  raw = new byte[fis.available()];
                String rawData=null;
                while(fis.read()!=-1)
                {
                    rawData = new String(raw);
                }
                return (processRawData(rawData));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return false;
            } catch (IOException e) { …
Run Code Online (Sandbox Code Playgroud)

java android android-asynctask

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

如何使用AsyncTask获取GPS位置?

我已经看到了很多这类问题的答案,但它与我的任务无关.我想在后台获取GPS位置,但我得到的例外是Cant Create Handler Inside Thread That Has Not Called Looper Prepare in AndroidmlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);.

public class GPSLocation extends AsyncTask<Void, Void, Void>
    {  
        @Override
        protected void onPreExecute()
        {  
            super.onPreExecute(); 
            progressDialog = new ProgressDialog(RoadMaintenanceActivity.this);
            progressDialog.setCancelable(true);
            progressDialog.setMessage("Getting GPS Location...");
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressDialog.setProgress(1);
            progressDialog.show();

        } 
        @Override 
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
         }

        @Override 
        protected void onPostExecute(Void result)
        { 

                progressDialog.cancel(); …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

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

AsyncTask没有进展到onPostExecute()

我正在使用AsyncTask加载diva WebView,同时显示一个ProgressDialog.内容已加载并ProgressDialog显示,但它不会消失,因为执行没有进入onPostExecute().你能告诉我我做错了什么吗?

package xx.xxx.xxx;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Document;

import android.R.string;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class NewsActivity extends Activity {
    private WebView wView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_main);

        new LoadNews().execute("");
    }

    private class LoadNews extends AsyncTask<String, Integer, String> {
        private ProgressDialog Dialog = new ProgressDialog(NewsActivity.this);

        @Override
        protected String doInBackground(String... …
Run Code Online (Sandbox Code Playgroud)

android android-webview jsoup android-asynctask

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

Android Dialog和AsyncTask导致UI冻结

所以,在我的Dialog中,我有一个启动Asynctask下载器的按钮,从我的服务器获取一些文件; 这工作得很好.但是,我想解除当前的Dialog并显示单击按钮上的ProgressDialog.我该如何处理这个问题?

目前,如果我点击按钮(我的Dialog中的一个元素),整个用户界面会在下载器从服务器下载文件时冻结.下载程序完成任务后,将显示进度对话框.

我的代码看起来像这样

MainActivity{

    Dialog dialog;
    ProgressDialog progress;

    onCreate(){
        dialog = new Dialog(this);
        progress = new ProgressDialog(this);
        dialog.setContentView(Some View Resource With My Button);
        someMethod();
        dialog.show();
    }

    someMethod(){
        Button button = (Button) dialog.findViewById(resource of button);
        button.setOnClickListener(new OnClickListener(){

            onClick(){
                dialog.dismiss();
                progress.show();
                new DownloaderAsyncTask(progress).execute().get();
            }

                    //go to another activity when download finished

        });
    }

    private class DownloaderAsyncTask extends AsyncTask<Void, Void, Void>{

        ProgressDialog progress;

        DownloaderAsyncTask(ProgressDialog progress){
            this.progress = progress;
        }

        doInBackGround(){
            //Downloading
        }

        onPostExecute(){
            //Kill connection
            this.progress.dismiss();
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

谢谢.如果您需要任何其他信息,请告诉我.

java multithreading android android-ui android-asynctask

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

逻辑上是真的但是'if statement'有一个让我的应用崩溃的方法

我在MapActivity中有一个AsyncTask类.在doInBacground()方法内部,我必须使用代码块.

它看起来像这样:

        @Override
        protected List<GeoPoint> doInBackground(String... arg0) {


            // check if the query (word and the distance) existing queries and return its id 
            int checkQuery = db.getQueryMatch(arg0[3].toString() , arg0[2].toString());
            Log.v(" CheckQuery int ", " equal? " + checkQuery );

            if (checkQuery  < 1) 
            {
                Block 1
            }
            else
            { 
                 Block 2
            }
Run Code Online (Sandbox Code Playgroud)

getQueryMatch方法将检查是否存在两个文本字段,然后返回记录ID.

int getQueryMatch(String word, String meter) {
    SQLiteDatabase db = this.getReadableDatabase();
    int getidd = 0; 
    Cursor cursor = db.query(TABLE_HISTORY, new String[] { KEY_ID, QUERYWORD, DISTANCEQ, KEY_TIMESTAMP }, QUERYWORD …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-asynctask

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

将AsyncTask onPreExecute添加到片段

我想将一个onPreExecute AsyncTask添加到SherlockFragment但它会导致错误.我的代码如下.在preExecute AsyncTask上添加对话框的代码有什么问题?

public class customlist extends SherlockFragment  {
static final String URL = "esample";
static final String KEY_SONG = "song"; // parent node
private static final String KEY_TAB_NUM = "key.tab.num";
 private ProgressDialog pDialog;


ListView list;
LazyAdapterbeth adapter;
XMLParser parser = new XMLParser();
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new getFeed().execute();

}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 

{
    View thisfragment = inflater.inflate(R.layout.dovomi, container, false);

    return thisfragment;
}




private class getFeed …
Run Code Online (Sandbox Code Playgroud)

android fragment android-asynctask actionbarsherlock

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

使用AsyncTask在ListView中显示数据,但不调用onPostExecute

我做了一个简单的AsyncTask类,借助这个stackoverflow问题在ListView中显示数据.但是没有调用AsyncTask onPostExecute.

这是我的代码:

public class Start extends SherlockActivity {

// JSON Node names
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";


// category JSONArray
JSONArray category = null;

private ListView lv;


@Override
public void onCreate(Bundle savedInstanceState) {
    setTheme(SampleList.THEME); //Used for theme switching in samples
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);


    new MyAsyncTask().execute("http://....");

    // Launching new screen on Selecting Single ListItem
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // …
Run Code Online (Sandbox Code Playgroud)

java android json android-listview android-asynctask

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

当Service在后台工作时,AsyncTask中的doInBackground从不调用

private class Test extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            Log.d("test", "called1");
        }

        @Override
        protected Void doInBackground(Void... params) {
            Log.d("test", "called2");
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            Log.d("test", "called3");
        }
    }
Run Code Online (Sandbox Code Playgroud)

并输出:

测试:called1

为什么其他方法永远不会在Service在后台工作时调用?如果服务停止,那么所有方法调用和输出:

测试:called1

测试:called2

测试:called3

java android android-service android-asynctask

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

NetworkOnMainThreadException从输入流中检索文件并将其打开为PDF

下面的代码基本上是有用的......主要是.它适用于我正在测试的所有手机,但在客户端手机上失败,我无法使用.此代码的哪一部分可能导致NetworkOnMainThreadException?

这真的很直接.我在onPostExecute()中做的是:

  1. 从onBackground()获取InputStream
  2. 如果InputStream为null则中止,如果为null则中止.
  3. 检查外部存储可用性,如果没有则中止.
  4. 从InputStream创建文件
  5. 检查PDF查看器是否可用,如果不可用则中止
  6. 打开新创建的PDF

    @Override
    protected void onPostExecute(InputStream is) {
        super.onPostExecute(is);
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
    
        if (is== null) {
            errorMessage = getString(R.string.error_server_communication);
            CustomDialogs.showErrorDialog( fragment.getActivity(), getString( R.string.error_title ), errorMessage );
            return;
        }
    
        //checking external storage avalibility
        if (!Tools.isWriteableExternalStorageAvalible()) {
            errorMessage = getString(R.string.error_no_external_storage);
            CustomDialogs.showErrorDialog( fragment.getActivity(), getString( R.string.error_title ), errorMessage );
            return;
        }               
    
        // opening pdf
        try {
            File directory = new File(Environment.getExternalStorageDirectory(), "MyApp");
            if (!directory.exists())
                directory.mkdirs();
    
            File file = new File(directory, "file.pdf");
    
            //usuwa poprzednio przechowywany wynik jesli …
    Run Code Online (Sandbox Code Playgroud)

android android-asynctask

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