我正在尝试将数据从“ asynctask”类发送到mainactivity类,我创建了一个带有函数的接口,该接口由主要活动实现,我的问题是我得到了“ java.lang.NullPointerException:尝试在空对象引用上调用接口方法'void com.example.ascheduler.SpinnerInterface.updateMyText(java.lang.Boolean)' “当我从异步调用
的“ updateMyText”函数时奇怪的是,我已经设置了另一个界面,并且它工作得很好,我不知道为什么这个界面没有
带有“ processFinish”功能的接口“ AsyncResponse”在调用时可以完美工作,而带有updateMyText功能的“ SpinnerInterface”接口在调用时会给出异常
package com.example.ascheduler;
public interface SpinnerInterface {
void updateMyText(Boolean yes);
}
package com.example.ascheduler;
import java.io.IOException;
public interface AsyncResponse {
void processFinish(String output) throws IOException;
}
public class Async extends AsyncTask<String,Void, String> {
public AsyncResponse delegate = null;
public SpinnerInterface updateMyText=null;
@Override
protected void onPreExecute() {
super.onPreExecute();
updateMyText.updateMyText(false); //this line gives the exception
}
protected void onPostExecute(String result) {
try {
if(result!=null) {
delegate.processFinish(result);
updateMyText.updateMyText(true);
}
} catch (IOException e) {
e.printStackTrace();
}
}
package com.example.ascheduler;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, AsyncResponse,View.OnClickListener,SpinnerInterface {
@Override
public void processFinish(String output) throws IOException {
if (output != null) {
//do stuff with output
}
}
@Override
public void updateMyText(Boolean flag) {
if(flag)
csSpinner.setVisibility(View.VISIBLE);
else
csSpinner.setVisibility(View.INVISIBLE);
}
}
答案 0 :(得分:0)
为避免在接口调用时出现空指针异常,您需要将内部接口设置为构造函数中的值,如下所示:
public Async(AsyncResponse delegate,SpinnerInterface updateMyText){
this.delegate=delegate;
this.updateMyText=updateMyText;
}
在创建Asyntask时,您将调用此构造函数。另外,您的示例似乎缺少很多代码。请添加所有需要的代码,以便我们更轻松地解决问题。