接口回调,其实就是将接口里面的内容(可能是接口里面数据需要传递),传递到实现这个接口的类中,看下面的是一个AsyncTask获取数据,
public class LoadJsonTask extends AsyncTask<String, Void, List<String>> {
// ①.定义一个接口!
public interface onGetJsonResultListener {
public void onGetJsonResult(List<String> result);
}
// ②.实例化接口对象
private onGetJsonResultListener mListener;
// ③.
// public void setOnGetJsonResultListener(onGetJsonResultListener listener)
// {
// this.mListener = listener;
// }
// ③.通过构造方法实例化接口对象
public LoadJsonTask(onGetJsonResultListener listener) {
this.mListener = listener;
}
@Override
protected List<String> doInBackground(String... params) {
List<String> list = new ArrayList<String>();
try {
// json数据
byte[] datas = HttpUtil.loadJson(params[0]);
// json字符串
String json = new String(datas);
JSONArray array = new JSONArray(json);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
String name = obj.getString("name");
list.add(name);
}
return list;
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(List<String> result) {
super.onPostExecute(result);
if (result != null) {
//AsyncTask---->Activity通过接口回调传值!
mListener.onGetJsonResult(result);
}
}
}
下面在看在activity中是如何传递的
public class MainActivity extends Activity implements onGetJsonResultListener {
private Spinner mSp;
private ArrayAdapter<String> adapter;
private String path = "http://chanyouji.com/api/articles.json?page=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSp = (Spinner) findViewById(R.id.sp);
// 获取数据源!
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
mSp.setAdapter(adapter);
//和startActivityForResult()类似.
new LoadJsonTask(this).execute(path);
}
//Activity<----从AsyncTask中取值
@Override
public void onGetJsonResult(List<String> result) {
adapter.addAll(result);
}
其实很简单,接口回调就是为了2个类或者多个类之间数据的传递,在LoadJsonTask 这个类中,获取的数据,如何传递到activity中了,通过通过接口回到的方法,
1,先思考,我要用接口传递什么东西,是string还是list,比如
// ①.定义一个接口!
public interface onGetJsonResultListener {
public void onGetJsonResult(List<String> result);
}
因为这个List<String> result,这个result值是由AsyncTask,传递给接口的,谁最终实现了这个接口,谁就会得到这个result值,
//Activity<----从AsyncTask中取值
@Override
public void onGetJsonResult(List<String> result) {
adapter.addAll(result);
}
最终我们这个值就传给了adapter,从而实现了一个下拉的列表的展示。
其实我们在开发的过程中,经常遇见接口回到的事情,比如说activity和fragment直接,就经常出现这样的问题,有时候,我们要将fragment中的数据传递给activity,我们就可以让
onAttachFragment(Fragment fragment),我们可以这样
if (fragment instanceof Fragment_first) {
mainListener1 = (MainListener) fragment;
}
网友评论