1 创建一个接口
import java.util.List;
public interface AsyncResponse {
void onDataReceivedSuccess(List<String> listData);
void onDataReceivedFailed();
}
2 在AsyncTask中通过此接口获取到onPostExecute中的数值
class SocketConnAsync extends AsyncTask<String, Void, String>
{
public AsyncResponse asyncResponse;
public void setOnAsyncResponse(AsyncResponse asyncResponse)
{
this.asyncResponse = asyncResponse;
}
@Override
protected String doInBackground(String... params) {
dataReceived = something;
return dataReceived;
}
@Override
protected void onPostExecute(String msg) {
super.onPostExecute(msg);
if (msg != null)
{
List<String> listData = new ArrayList<String>();
listData = parseJsonResponse(msg);//解析msg的一个函数
asyncResponse.onDataReceivedSuccess(listData);//将结果传给回调接口中的函数
}
else {
asyncResponse.onDataReceivedFailed();
}
}
}
3 在Activity中实现此接口即可
public class MainActivity extends Activity
{
private ListView environListView;
private List<String> environmentList = null;//listview上显示的数据源
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.listview_environment);
sendRequestForListData();
}
private void sendRequestForListData()
{
try {
final SocketConnAsync socketConn = new SocketConnAsync();
socketConn.execute(params);
socketConn.setOnAsyncResponse(new AsyncResponse() {
//通过自定义的接口回调获取AsyncTask中onPostExecute返回的结果变量
@Override
public void onDataReceivedSuccess(List<String> listData) {
Log.d(TAG, "onDataReceivedSuccess");
environmentList = listData;//如此,我们便把onPostExecute中的变量赋给了成员变量environmentList
}
@Override
public void onDataReceivedFailed() {
ToastUtil.show(MainActivity.this, "data received failed!");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}