美文网首页Android开发Android开发经验谈
异步请求数据的集中方法实现(1)——接口回调

异步请求数据的集中方法实现(1)——接口回调

作者: 一只胖胖胖胖猿 | 来源:发表于2018-07-20 09:31 被阅读23次

  Android对于访问请求数据,经常需要异步访问访问网络,请求数据。对于请求的数据需要传递给数据使用的地方。所以,Android中有好几种方式可以进行异步的数据传递。

接口异步数据请求

步骤:

1.定义一个接口,里面实现数据传递的方法
2.定义一个接口的对象
3.定义一个public的方法,用于对接口对象进行初始化
4.在异步传递数据的地方,调用接口里面的方法,参数为需要传递的数据
5.在需要接收数据的地方,实现接口。在对应的接口方法里面进行数据操作

具体实现

  1.新建一个接口,里面定义数据返回成功和失败的方法。

interface getInterface{
  void getDataSuccfess(String date);
  void getDataFailed(String errot);
}

  2.定义一个接口的对象

private getInterface mgetInterface;

  3.定义一个公共方法。

  public void setInterface(getInterface getInterface){  //其他类调用接口时的一个窗口
        this.mgetToken=getToken;
    }

  4.在需要传递数据的地方调用接口的方法

 new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpUtils.post()
                        .url(Config.tokenUrl)
                        .addParams("app_id", Config.APPID)
                        .addParams("device_id", "x1000")
                        .addParams("timestamp", timestamp)
                        .addParams("nonce",strRand)
                        .addParams("signature", signature)
                        .build()
                        .execute(new StringCallback() {
                            @Override
                            public void onError(Request request, Exception e) {

                            }
                            @Override
                            public void onResponse(String response) {
                                Log.i(TAG, "onResponse: "+response);
                                try {
                                    JSONObject object= new JSONObject(response);
                                    JSONObject data = object.getJSONObject("data");
                                    String token=data.getString("device_token");
                                    if (mgetToken!=null){//先判断当前对象是都为空
                                        mgetToken.getDevicetoken(token);
                                    }
                                    Log.i(TAG, "onResponse: "+data);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        });


            }
        }).start();

  5.在需要接收数据的地方,调用公共的方法,实现接口的方法

 setDevicetoken(new getToken() {
            @Override
            public void getDevicetoken(String token) {

            }
        });

整体代码如下:


public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private static final String TAG = MainActivity.class.getSimpleName();
    private tokenBean token;
    private String timestamp;
    private String signature;
    private String strRand;
    private getToken mgetToken;
    private EditText mEditInput;
    private Button mBtnQuery;
    private TextView mShowView;
    private Button mBtnList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();

    }

    private void init() {
        initAPI();
        initView();
        initData();
        setDevicetoken(new getToken() {
            @Override
            public void getDevicetoken(String token) {

            }
        });

    }

    private void initData() {
        mBtnQuery.setOnClickListener(this);

    }

    private void QueryApi(final String input) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpUtils.post()
                        .url(Config.QUERYURL)
                        .addParams("app_id", Config.APPID)
                        .addParams("device_id", "x1000")
                        .addParams("timestamp", timestamp)
                        .addParams("nonce",strRand)
                        .addParams("signature", signature)
                        .addParams("content",input)
                        .build()
                        .execute(new StringCallback() {
                            @Override
                            public void onError(Request request, Exception e) {

                            }
                            @Override
                            public void onResponse(String response) {
                                Log.i(TAG, "onResponse: "+response);
                                Gson gson= new Gson();
                                QueryMusicBean queryMusicBean=gson.fromJson(response,QueryMusicBean.class);
                                String playUrl = queryMusicBean.getAudioinfos().getContents().get(0).getPlay_url_with_token();
                                Log.i(TAG, "onResponse: "+playUrl);
                                String str=queryMusicBean.getAudioinfos().getContents().get(0).getName();
                                Log.i(TAG, "onResponse: str+"+str);
                                Message msg=new Message();
                                msg.what=100;
                                msg.obj=playUrl;
                                mHandler.sendMessage(msg);
                            }
                        });


            }
        }).start();
    }
    Handler mHandler= new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 100:
                    mShowView.setText(msg.obj.toString());
                    Log.i(TAG, "handleMessage: "+msg.obj.toString());
                    break;
            }
        }
    };
    private void initView() {
        mEditInput = (EditText) findViewById(R.id.edit_input);
        mBtnQuery = (Button) findViewById(R.id.button);
        mShowView = (TextView) findViewById(R.id.Tv_view);
        mBtnList = (Button) findViewById(R.id.button2);

    }

    private void initAPI() {
        //api授權
        timestamp = new Date().getTime()+"";
        Log.i(TAG, "init: time"+timestamp);
        signature = sha1.encode(Config.APPID + Config.ServiceKey + timestamp);
        Log.i(TAG, "init: "+signature);
        strRand = "";
        for (int i = 0; i < 32; i++) {
            strRand += String.valueOf((int) (Math.random() * 10));
        }
        getToken();
    }


    public void getToken() {

        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpUtils.post()
                        .url(Config.tokenUrl)
                        .addParams("app_id", Config.APPID)
                        .addParams("device_id", "x1000")
                        .addParams("timestamp", timestamp)
                        .addParams("nonce",strRand)
                        .addParams("signature", signature)
                        .build()
                        .execute(new StringCallback() {
                            @Override
                            public void onError(Request request, Exception e) {

                            }
                            @Override
                            public void onResponse(String response) {
                                Log.i(TAG, "onResponse: "+response);
                                try {
                                    JSONObject object= new JSONObject(response);
                                    JSONObject data = object.getJSONObject("data");
                                    String token=data.getString("device_token");
                                    if (mgetToken!=null){
                                        mgetToken.getDevicetoken(token);
                                    }
                                    Log.i(TAG, "onResponse: "+data);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        });


            }
        }).start();

    }
    public void setDevicetoken(getToken getToken){  //其他类调用接口时的一个窗口
        this.mgetToken=getToken;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button:
                String input= mEditInput.getText().toString();
                QueryApi(input);
                Log.i(TAG, "onClick: "+input);
                break;
            case R.id.button2:
                getList();
                Log.i(TAG, "onClick: +List");
                break;

        }

    }

    /**
     * 獲取列表
     */
    private void getList() {

        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpUtils.post()
                        .url(Config.LISTURL)
                        .addParams("app_id", "Foxconn000000001")
                        .addParams("device_id", "x1000")
                        .addParams("timestamp", "1508310642688")
                        .addParams("nonce","8SXtViQZzfSseKV2tV2nSJYFfhSeKzY4")
                        .addParams("signature","b70b8d4d7d7951adb3ea4439a0066aa10d9e6b62")
                        .build()
                        .execute(new StringCallback() {
                            @Override
                            public void onError(Request request, Exception e) {
                                Log.i(TAG, "onError: ");

                            }
                            @Override
                            public void onResponse(String response) {
                                Log.i(TAG, "onResponse: "+response);
                                Gson gson= new Gson();
                                listBean mlistBean= gson.fromJson(response,listBean.class);
                                String catName = mlistBean.getAudioinfos().getCats().get(0).getCat_name();
                                Log.i(TAG, "onResponse: catNamr+"+catName);
//                                Message msg=new Message();
//                                msg.what=100;
//                                msg.obj=playUrl;
//                                mHandler.sendMessage(msg);

                            }
                        });


            }
        }).start();
    }

    interface getToken{
        void getDevicetoken(String token);
    }
}

相关文章

  • 异步请求数据的集中方法实现(1)——接口回调

      Android对于访问请求数据,经常需要异步访问访问网络,请求数据。对于请求的数据需要传递给数据使用的地方。所...

  • Kotlin使用接口回调

    1.Java中的接口回调实现(支持多方法回调) 声明回调接口,初始化接口 使用接口回调(无参数) 使用接口回调(带...

  • Android Module之间数据传递

    方法一:使用接口回调 (1)在子module创建回调接口(参数可变) (2)在子module 实现类设置接口回调 ...

  • java回调函数

    利用接口来实现回调,即在调用回调函数的类中实现接口,并实现接口中的方法即回调的方法,被调用类中存在接口的熟悉,并将...

  • 六号线晚报0522

    天气:多云 风力:微风 回调 把实现回调接口的类对象传递到方法里面再利用此对象执行操作异步,即在在方法里启动另一...

  • 移动架构--13.简单仿网络访问框架

    1.提供网络请求的包装类 2.网络访问结果回调接口 3.网络访问具体实现接口 4.供应用层回调的网络访问回调接口 ...

  • AJAX常见的status状态码

    我们写前端向后端请求数据的时候,无论请求的这个接口成功或者失败。都会带有返回的状态值。在AJAX异步请求的回调中,...

  • Java基础(4)——接口interface

    本节内容1.接口的理解和定义2.接口实现数据回调3.接口实现回调(中介租房) 一、接口的理解和定义1.接口:一套协...

  • OAuth2生成token代码备忘

    一、登录接口(用户名+密码) 1、前端请求auth服务 2、请求数据 3、Controller方法 二、授权接口调...

  • iOS如何把异步接口转为同步接口

    如何把一个异步接口在转变为同步接口?异步的特点是执行结果通过回调方法返回,不会阻塞方法的执行。 要把异步接口转为同...

网友评论

    本文标题:异步请求数据的集中方法实现(1)——接口回调

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