Android - 尝试从应用程序登录服务器时跳过框架。 (异步)

时间:2017-12-24 16:54:34

标签: android asynchronous

   public class AppApi extends AsyncTask<String, Void, String> {

    private OkHttpClient client;
    private Request request;
    private MediaType JSON;
    private String URL;
    private RequestBody body;

    public AppApi(JSONObject obj) {
        client = new OkHttpClient();
        JSON = MediaType.parse("application/json; charset=utf-8");
        URL = "http://serverapi.domain.com/user/login";
        Log.d("Information",obj.toString());
        body = RequestBody.create(JSON, obj.toString());
        request = new Request.Builder()
                .url(URL)
                .post(body)
                .build();
    }

    @Override
    protected String doInBackground(String... strings) {
        // execute fonksiyonu cagrilarak calistirilir
        try {
            Response response = client.newCall(request).execute();
            return response.body().string();
        } catch (Exception ex) {
            Log.e("doInBackground()", ex.getMessage());
            return null;
        }
    }

    protected void onProgressUpdate(Integer... progress) {
        // setProgressPercent(progress[0]);
    }

    protected void onPostExecute(Long result) {
        // showDialog("Downloaded " + result + " bytes");
    }
}

    btnLogin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        login();
    }
}

下面的LoginActivity.Java。

private void login() {
    JSONObject data = new JSONObject();
    try {
        data.put("email", "email");
        data.put("password", "pass");
    } catch (JSONException e) {
    }

    AppApi api = new AppApi(data);

    try {
        String result = api.execute().get();
        Log.d("login()", result);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

因此应用程序的问题是我们无法正确登录我们的https服务器。 Android Studio表示正在跳帧。

  

I / Choreographer:跳过77帧!该应用程序可能也在做   在其主线上做了很多工作。

当我们故意输入错误的密码时,它会跳过更多的帧。(200ish) 我认为我们在Async任务端正确完成了大部分编码。我们如何检查返回值?我们如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试将构建请求也放入后台线程.i.e

private JSONObject obj;
public AppApi(JSONObject obj) {
        this.obj = obj;
    }

    @Override
    protected String doInBackground(String... strings) {
        // execute fonksiyonu cagrilarak calistirilir
        try {
client = new OkHttpClient();
        JSON = MediaType.parse("application/json; charset=utf-8");
        URL = "http://serverapi.domain.com/user/login";
        Log.d("Information",obj.toString());
        body = RequestBody.create(JSON, obj.toString());
        request = new Request.Builder()
                .url(URL)
                .post(body)
                .build();
            Response response = client.newCall(request).execute();
            return response.body().string();
        } catch (Exception ex) {
            Log.e("doInBackground()", ex.getMessage());
            return null;
        }
    }