java - TextView 在 AsyncTask 中给出 NullPointerException

标签 java android

这应该是一件微不足道的事情,但我真的想知道发生了什么,因为我从在线类(class)复制了代码,它在其中工作,并且它给了我空指针异常。到目前为止一切似乎都是正确的

这是 MainActivity 类

public class MainActivity extends Activity {


Button button1;
TextView textview2;
ProgressBar progressbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.activity_main);

    TextView textview2=(TextView)findViewById(R.id.textview2);

    Button button1=(Button)findViewById(R.id.button1);



    ProgressBar progressbar1=(ProgressBar)findViewById(R.id.progressbar1);

        button1.setOnClickListener(new Button.OnClickListener() {


          public void onClick(View v) {



            asy task=new asy(MainActivity.this);
            task.execute("Process me","Process me too");





            }


        });
}

}

然后这就是异步的 fragment

public class asy extends AsyncTask<String,Integer,Long> {


public MainActivity host;

public asy (MainActivity host) {
    this.host=host;

}
@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub



    super.onPreExecute();
  host.textview2.setText("Processing..");

;
}

在 logcat 中我看到

E/AndroidRuntime(28044): FATAL EXCEPTION: main
E/AndroidRuntime(28044): java.lang.NullPointerException
E/AndroidRuntime(28044):    at com.example.async.asy.onPreExecute(asy.java:25)
E/AndroidRuntime(28044):    at android.os.AsyncTask.execute(AsyncTask.java:391)

我的意思是一切对我来说都是正确的,我在 SetContentView 之后初始化 TextView,我使用构造函数,为什么它没有在 AsyncTask 中初始化?

最佳答案

public class MainActivity extends Activity 
{
Button button1;
TextView textview2;
ProgressBar progressbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.activity_main);

    textview2=(TextView)findViewById(R.id.textView2);

    button1=(Button)findViewById(R.id.button1);



    progressbar=(ProgressBar)findViewById(R.id.progressbar1);

        button1.setOnClickListener(new Button.OnClickListener()
        {
          public void onClick(View v) 
          {
            asy task=new asy(MainActivity.this);
            task.execute("Process me","Process me too");
          }
        });
}

public class asy extends AsyncTask<String,Integer,Long> 
{

    public MainActivity host = new MainActivity();

    public asy (MainActivity host) 
    {
        this.host=host;
    }
    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
        host.textview2.setText("Processing..");
    }
    @Override
    protected Long doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        return null;
    }
}

}

关于java - TextView 在 AsyncTask 中给出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119009/

相关文章:

java - HttpURLConnection 如何获取其 inputStream 实例?

java - ListView 适配器异步操作

Android 应用程序链接在 android 12 中不起作用总是在浏览器中打开

java - 如何异步接收来自Web的数据并在下一行代码中使用结果字符串?

android - 如何使 Android CheckedTextView 中的复选框左对齐而不是右对齐?

java - BufferedReader 由 HTTPClient 终止

java - Tomcat 7 无法部署 war - 无法解析配置类

java - 用唯一替换替换字符串中的所有实例

java - 动态注入(inject)属性到spring

android - 通过 Admob 广告赚取收入