这应该是一件微不足道的事情,但我真的想知道发生了什么,因为我从在线类(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/