【问题标题】:AsyncTask doinBackground runtime error after moving function out of current class将函数移出当前类后的 AsyncTask doinBackground 运行时错误
【发布时间】:2014-06-03 15:16:44
【问题描述】:

我有一个 LoadImag 类扩展了从在线资源引用的 AsyncTask。在 doinBackfround 中,它调用当前类中的一个函数。一切正常,但是当我将函数移出当前类时,它会显示运行时错误函数。我不明白为什么。 这是我的代码:

这是异步任务:

它在 CLASS FragmentOne.java 中

public class loadMovieView extends AsyncTask<String, String, Void> {
    @Override
    protected void onPreExecute() {
        Toast.makeText(getActivity().getApplicationContext(),
                "onPreExecute \n: preload bitmap in AsyncTask",
                Toast.LENGTH_LONG).show();
    }

    @Override
    protected Void doInBackground(String...url) {
        // TODO 
        try{
            for(String strUrl: url){
                scrBitmap = decodeImg(strUrl,250,380);
                publishProgress(strUrl);
            }
        }catch (Exception e) {
            Log.v("img_decode", e.getMessage().toString());
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(String...arrUrl){
        Log.v("CurrentUrl", arrUrl.toString());
        horizontaLayout.addView(AddImagesToView(scrBitmap));
    }

}

这段代码下面是我在AsyncTask中使用的函数decodeImg()和AddImagesToView();因为我需要经常使用 decodeImg() 函数,

所以我创建了一个名为 ImageLoader.java 的新类文件

public class ImageLoader {
ImageLoader imgeLoader;

public Bitmap decodeImg(String path, int reqWidth,
        int reqHeight) {
}

public Bitmap LoadImage(String url, BitmapFactory.Options options) {
    // TODO Auto-generated method stub
}

private InputStream OpenHttpConnection(String strUrl) throws IOException {
}
}

但是现在当我改变了

scrBitmap = decodeSampledBitmapFromUri(strUrl,250,380);

在AsyncTask中进入

ImageLoader imgLoader;
scrBitmap = imgLoader.decodeSampledBitmapFromUri(strUrl,250,380);

现在不行了。错误日志如下:

06-03 11:12:03.462: E/AndroidRuntime(19993): FATAL EXCEPTION: AsyncTask #2
06-03 11:12:03.462: E/AndroidRuntime(19993): Process: com.example.theatre_sliding, PID: 19993
06-03 11:12:03.462: E/AndroidRuntime(19993): java.lang.RuntimeException: An error occured while executing     doInBackground()
06-03 11:12:03.462: E/AndroidRuntime(19993): at android.os.AsyncTask$3.done(AsyncTask.java:300)
06-03 11:12:03.462: E/AndroidRuntime(19993): at  java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
06-03 11:12:03.462: E/AndroidRuntime(19993): at     java.util.concurrent.FutureTask.setException(FutureTask.java:222)
06-03 11:12:03.462: E/AndroidRuntime(19993): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
06-03 11:12:03.462: E/AndroidRuntime(19993): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-03 11:12:03.462: E/AndroidRuntime(19993): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-03 11:12:03.462: E/AndroidRuntime(19993): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-03 11:12:03.462: E/AndroidRuntime(19993): at java.lang.Thread.run(Thread.java:841)
06-03 11:12:03.462: E/AndroidRuntime(19993): Caused by: java.lang.NullPointerException
06-03 11:12:03.462: E/AndroidRuntime(19993): at com.example.theatre_sliding.FragmentOne$loadMovieView.doInBackground(FragmentOne.java:128)
06-03 11:12:03.462: E/AndroidRuntime(19993): at com.example.theatre_sliding.FragmentOne$loadMovieView.doInBackground(FragmentOne.java:1)
06-03 11:12:03.462: E/AndroidRuntime(19993): at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-03 11:12:03.462: E/AndroidRuntime(19993): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-03 11:12:03.462: E/AndroidRuntime(19993): ... 4 more

我不知道为什么会这样,有人可以帮助我吗?谢谢!!!

【问题讨论】:

  • 这不是一个答案,但请考虑使用像 Picasso 这样的库来异步加载和缓存图像。它会为您省去很多麻烦。
  • 非常感谢!我只需要将它用作我的应用功能的一部分

标签: android class android-asynctask httpclient


【解决方案1】:

你没有正确初始化你的对象。所以这段代码应该是:

ImageLoader imgLoader;

类似这样的:

ImageLoader imgLoader = new ImageLoader();

【讨论】:

  • 哦....我太愚蠢了,我不敢相信我忘记了这个!!!!问题解决了!!谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2014-04-17
相关资源
最近更新 更多