美文网首页
接口回调

接口回调

作者: UnkingCoder | 来源:发表于2017-09-22 16:21 被阅读5次

    接口回调,其实就是将接口里面的内容(可能是接口里面数据需要传递),传递到实现这个接口的类中,看下面的是一个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;
       }

    相关文章

      网友评论

          本文标题:接口回调

          本文链接:https://www.haomeiwen.com/subject/yezxextx.html