【问题标题】:how can i separate okhttp3 class in activity to another class我如何将活动中的 okhttp3 类分离到另一个类
【发布时间】:2019-03-23 20:54:36
【问题描述】:

我在活动中创建了 okhttp3 方法并且效果很好,但是我想从另一个活动中调用这个 okhttp3 方法,所以我相信我需要通过创建单独的类来分离这个 okhttp3,所以我需要帮助如何创建单独的 okhttp3 类

这是我在活动中创建的方法

public void getJsonData(final int method, final String email, final String password, final String page, final String token){
        OkHttpClient client = new OkHttpClient();
        Request request;
        RequestBody formBody;
        HttpUrl gurl;
        //mToken = token;
        if(networkIsAvailable()){
            if(method == POST){
                mProgressBar.setVisibility(View.VISIBLE);
                String url = "http://35.240.138.251/api/auth/login";
                formBody = new FormBody.Builder()
                        .add("email", email)
                        .add("password", password)
                        .build();
                request = new Request.Builder()
                        .url(url)
                        .post(formBody)
                        .build();
            } else {
                 gurl = new HttpUrl.Builder()
                        .scheme("http")
                        .host("35.240.138.251")
                        .addPathSegment("api")
                        .addPathSegment(page)
                        .addQueryParameter("token",token)
                        .build();
                request = new Request.Builder()
                        .url(gurl)
                        .build();
            }
            Call call = client.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    if(method == POST){
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //Toast.makeText(getApplicationContext(),"Gangguan koneksi, periksa koneksi internet anda!",Toast.LENGTH_LONG).show();
                               SHOULD WE MOVE THIS --> errorAlert(); <--

                              -->  login(); <--
                            }
                        });
                    } else {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                String intoken = mJsonManager.getToken();
                                if(!nager.isEmpty()) {
                                    getJsonData(GET,null,null,"wartarutin",intoken);
                                } else {
                                    getJsonData(GET,null,null,"wartaprofil",intoken);
                                }
                            }
                        });
                    }
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if(response.code() == 401){
                        if(method == POST) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                  -->  reLoginAlert(); <--
                                }
                            });
                        } else {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    getJsonData(POST,email,password,null,null);
                                }
                            });
                        }
                    }
                    if(response.isSuccessful()){
                        if(method == POST) {
                            try {
                                String jsonData = response.body().string();
                                mJsonManager.setToken(jsonData);
                                Log.v(TAG, jsonData);

                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        -- > loginArea.setVisibility(View.INVISIBLE); <--
                                        String inToken = mJsonManager.getToken();
                                        mToken = inToken;
                                        if (nager == null) {
                                            getJsonData(GET, null, null, "wartaprofil", inToken);
                                        } else {
                                            getJsonData(GET, null, null, "wartarutin", inToken);
                                        }
                                    }
                                });
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        } else {
                            String jsonData = response.body().string();
                            switch(page){
                                case "wartaprofil":
                                    try {
                                        mJsonManager.setProfilStat(PrologueActivity.this, jsonData);
                                        Log.v(TAG, jsonData);
                                        runOnUiThread(new Runnable() {
                                            @Override
                                            public void run() {
                                              -->  openTitle();  <--
                                            }
                                        });

                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                    break;
                                case "wartarutin":
                                    try {
                                        mJsonManager.setWartaStat(PrologueActivity.this, jsonData);
                                        Log.v(TAG, jsonData);
                                        runOnUiThread(new Runnable() {
                                            @Override
                                            public void run() {
                                                goToMainApp();
                                            }
                                        });
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                            }
                        }
                    }
                }
            });
        }
    }

所以 json 数据被传递给 JsonManager 类并由该类保存到数据库。 我想从另一个活动中调用此方法,因此我不必在另一个活动中重复相同的方法..请分享您的想法..

【问题讨论】:

    标签: java android performance android-studio okhttp3


    【解决方案1】:
    1. 您可以创建一个 BaseActivity,然后所有活动都扩展它,
    2. 将您的方法移至 BaseActivity,
    3. 您可以在任何扩展 BaseActivity 的 Activity 中调用它。

    follow 是你的 BaseActivity

    public class BaseActivity extends Activity{ 
        //here is your method body
        public String methodA(Runnable run){
            //handle your result in run
            runOnUiThread(run);
            return "hello-world";
        }
    }
    

    follow 是你的 ActivityA

    public class ActivityA extends BaseActivity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            //invoke methodA
            String myData = methodA(new Runnable(){
            @Override
            public void run() {
                //handle json data
            }
        });
        }
    }
    

    【讨论】:

    • 我们该怎么做??
    • 我重新编辑了我的帖子,请检查,有任何问题请告诉我。
    • 如果您在每个 okhttp 响应结果中看到我调用 runOnUI 线程的方法.. 我们如何将其解析为基本活动??
    • 我不明白你想做什么,你能描述更多细节吗?
    • 好的..我已经将方法getJsonData()移动到BaseActivity我是否必须将在getJsonData()中调用的其他方法也移动到BaseActivity..如果是这样..怎么样像ProgressBar 这样的组件我们如何解决这个问题.. 我会在我的问题中加上标记..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多