Android 调用AsyncTask.onPreExecute()时发生NullPointerException

Android 调用AsyncTask.onPreExecute()时发生NullPointerException,android,html-parsing,android-asynctask,Android,Html Parsing,Android Asynctask,我是这个网站的新手。 我的AsyncTask和android程序出错。。。这是我写的第一个异步任务 名为SocialApp.java的主类 @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView t = (TextView) this.findViewById(

我是这个网站的新手。 我的AsyncTask和android程序出错。。。这是我写的第一个异步任务

名为SocialApp.java的主类

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView t = (TextView) this.findViewById(R.id.textView1);       

    HTMLParser task = new HTMLParser();
    task.setTextView(t);
    task.execute();        
}
基本任务

导致这个

12-15 12:34:11.808: E/AndroidRuntime(590):  at cv.mk.android.utapp.HTMLParser.onPreExecute(HTMLParser.java:24)
12-15 12:34:11.808: E/AndroidRuntime(590):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
12-15 12:34:11.808: E/AndroidRuntime(590):  at android.os.AsyncTask.execute(AsyncTask.java:511)
12-15 12:34:11.808: E/AndroidRuntime(590):  at cv.mk.android.utapp.SocialApp.onCreate(SocialApp.java:26)
12-15 12:34:11.808: E/AndroidRuntime(590):  at android.app.Activity.performCreate(Activity.java:4465)
12-15 12:34:11.808: E/AndroidRuntime(590):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-15 12:34:11.808: E/AndroidRuntime(590):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
12-15 12:34:11.808: E/AndroidRuntime(590):  ... 11 more
12-15 12:34:19.666: D/dalvikvm(609): GC_FOR_ALLOC freed 33K, 3% free 9890K/10179K, paused 215ms
12-15 12:34:19.677: I/dalvikvm-heap(609): Grow heap (frag case) to 11.363MB for 1700016-byte allocation
12-15 12:34:19.747: D/dalvikvm(609): GC_CONCURRENT freed <1K, 3% free 11549K/11847K, paused 3ms+12ms
12-15 12:34:19.967: D/dalvikvm(609): GC_CONCURRENT freed 1K, 2% free 12079K/12231K, paused 2ms+3ms
12-15 12:34:20.037: D/dalvikvm(609): GC_FOR_ALLOC freed 1K, 2% free 12298K/12487K, paused 24ms
12-15 12:34:20.277: D/AndroidRuntime(609): Shutting down VM
12-15 12:34:20.277: W/dalvikvm(609): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
12-15 12:34:20.277: D/dalvikvm(609): GC_CONCURRENT freed 1K, 1% free 13063K/13191K, paused 3ms+3ms
12-15 12:34:20.287: E/AndroidRuntime(609): FATAL EXCEPTION: main
12-15 12:34:20.287: E/AndroidRuntime(609): java.lang.RuntimeException: Unable to start activity ComponentInfo{cv.mk.android.utapp/cv.mk.android.utapp.SocialApp}: java.lang.NullPointerException
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.os.Looper.loop(Looper.java:137)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.ActivityThread.main(ActivityThread.java:4340)
12-15 12:34:20.287: E/AndroidRuntime(609):  at java.lang.reflect.Method.invokeNative(Native Method)
12-15 12:34:20.287: E/AndroidRuntime(609):  at java.lang.reflect.Method.invoke(Method.java:511)
12-15 12:34:20.287: E/AndroidRuntime(609):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-15 12:34:20.287: E/AndroidRuntime(609):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-15 12:34:20.287: E/AndroidRuntime(609):  at dalvik.system.NativeStart.main(Native Method)
12-15 12:34:20.287: E/AndroidRuntime(609): Caused by: java.lang.NullPointerException
12-15 12:34:20.287: E/AndroidRuntime(609):  at cv.mk.android.utapp.HTMLParser.onPreExecute(HTMLParser.java:24)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.os.AsyncTask.execute(AsyncTask.java:511)
12-15 12:34:20.287: E/AndroidRuntime(609):  at cv.mk.android.utapp.SocialApp.onCreate(SocialApp.java:26)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.Activity.performCreate(Activity.java:4465)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-15 12:34:20.287: E/AndroidRuntime(609):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
12-15 12:34:20.287: E/AndroidRuntime(609):  ... 11 more
我已经尝试了一切,我真的很困惑到底发生了什么


感谢您的时间和努力。

您不能在doInBackground中给t.setText打电话。该方法在其他线程中运行,因此无法更新UI。只有UI线程中的东西才能做到这一点。因此,在处理过程中,如果要更新UI,必须调用publishProgress,然后UI线程将调用onProgressUpdate,在那里您可以更新UI

有关详细说明,请参阅此线程:


虽然这仍然有效,但我错过了NullPointer异常。t可能没有像上面所说的那样初始化。

您不能在doInBackground中调用t.setText。该方法在其他线程中运行,因此无法更新UI。只有UI线程中的东西才能做到这一点。因此,在处理过程中,如果要更新UI,必须调用publishProgress,然后UI线程将调用onProgressUpdate,在那里您可以更新UI

有关详细说明,请参阅此线程:


虽然这仍然有效,但我错过了NullPointer异常。t可能没有像上面所说的那样进行初始化。

将asynctask放入活动中,如下所示:

public class HTMLParser extends AsyncTask<Void, Void, Boolean> {

String title = "error";

public void setTextView(TextView t){
    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);
}

@Override
protected void onPreExecute() {

    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);

}

@Override
protected Boolean doInBackground(Void ... arg0) {
    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);
}

@Override
protected void onPostExecute(Boolean result) {
    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);


}
}

将asynctask放入活动中,如下所示:

public class HTMLParser extends AsyncTask<Void, Void, Boolean> {

String title = "error";

public void setTextView(TextView t){
    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);
}

@Override
protected void onPreExecute() {

    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);

}

@Override
protected Boolean doInBackground(Void ... arg0) {
    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);
}

@Override
protected void onPostExecute(Boolean result) {
    ((TextView) SocialApp.this.findViewById(R.id.yourtextview)).setText(title);


}
}


而不是t.setTexttitle;在异步任务内部,尝试在您的活动上创建一个方法来执行此操作,并在您的异步任务上调用该方法,因此我必须将SocialApp实例发送到异步任务中?您将获得一个NullPointerException,您确定TextView已正确初始化吗?它会出现在屏幕上…当我模拟它时否您可以使用SocialApp.this for istance SocialApp.this.FindViewByView vinstead of t.setTexttitle;在异步任务内部,尝试在您的活动上创建一个方法来执行此操作,并在您的异步任务上调用该方法,因此我必须将SocialApp实例发送到异步任务中?您将获得一个NullPointerException,您确定TextView已正确初始化吗?它会出现在屏幕上…当我模拟它时否您可以使用SocialApp.this for istance SocialApp.this.FindView wByView访问您的对象v@Noureddine....it表示在Scope中无法访问SocialApp类型的封闭实例,则该活动的名称不是SocialApp。将SocialApp.this.findViewById更改为包含活动this的活动的名称。findViewById@Nourreddine...it表示公共类SocialApp扩展了活动{谢谢你们……我发现了错误……它没有初始化correctly@Noureddine....it表示在作用域中无法访问SocialApp类型的封闭实例,则该活动的名称不是SocialApp。请将SocialApp.this.findViewById更改为封闭活动的名称。findViewById@Nourreddine...it表示公共类SocialApp扩展了活动{谢谢大家…我发现了错误…当我用设置textView时,它没有正确初始化。在调用super.onCreatesavedInstanceState;setContentViewR.layout.main;之前,让我们先打个招呼吧…它工作正常:D…但是asynctask弄糟了。你们能远程使用我的计算机看看有什么问题吗?谢谢大家…我收到错误…它没有正确初始化当我设置textView时,让我们在调用super.onCreatesavedInstanceState;setContentViewR.layout.main;之前打个招呼…它工作正常:D…但是asynctask弄乱了它。您能远程使用我的计算机看看有什么问题吗?谢谢大家…我收到了错误…我t没有正确初始化