Android改造POST工作正常,如果应用程序从Android工作室构建,但从apk安装时崩溃

问题描述 投票:0回答:1

我有一个应用程序,当我使用Android Studio构建应用程序时工作正常。但是当我创建一个未签名的apk然后从那里安装应用程序时崩溃了。它在按钮点击登录按钮时崩溃,我在那里使用改装调用API。请指导我。

错误:

2019-03-16 09:16:07.185 19648-19648/com.od.phr.staging E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.od.phr.staging, PID: 19648
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equalsIgnoreCase(java.lang.String)' on a null object reference
    at com.od.phr.retrofit.PHRResponse.isSuccess(Unknown Source:4)
    at com.od.phr.retrofit.ApiCallback.onResponse(Unknown Source:474)
    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(Unknown Source:41)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:7000)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

活动代码:

public void signIn(JogetResponse.Listener<Boolean> listener, JogetResponse.ErrorListener errorListener, String userId, String pass) {
    Pair<Boolean, List<String>> validate = mUser.validate(userId, pass, realm);

    if (validate.first) {
        User.UserPayload payload = new User.UserPayload(userId, pass, Constants.Action.LOGIN);

        ApiManager.getInstance(getApplication().getApplicationContext()).loginUser(payload, new ApiCallback<PHRResponse<User>>() {

            @Override
            public void onSuccessCustomFunction(PHRResponse<User> response) {
            }

            @Override
            public void onSuccess(PHRResponse<User> response) {
                listener.onResponse(Boolean.TRUE);
            }

            @Override
            public void onFail(Throwable throwable) {
                errorListener.onErrorResponse(throwable);
            }
        });

    } else {
        errorListener.onErrorResponse(new Throwable(TextUtils.join("\n", validate.second)));
    }
}

P HR response.Java

public class PHRResponse<T> {
String status;
String msg;
T data;

public T getData() {
    return data;
}

public boolean isSuccess() {
    return status.equalsIgnoreCase("SUCCESS");
}

public String getErrorMessage() {
    return msg;
}

}

API callback.Java

public abstract class ApiCallback<T> implements Callback<T> {

private String log = "";

public abstract void onSuccessCustomFunction(T response);


@Override
public final void onResponse(Call<T> call, Response<T> response) {
    Log.i(Constants.TAG, "ApiCallback onResponse()");
    log += "HTTP: [" + response.code() + "]\n" +
            "HTTP Message: [" + response.message() + "]\n" +
            "URL: [" + call.request().url().toString() + "]\n" +
            "Method: [" + call.request().method() + "]\n" +
            "Host: [" + call.request().url().host() + "]\n" +
            "Query: [" + call.request().url().query() + "]\n";


    Log.i(Constants.TAG, "ApiCallback onResponse() log: " + log);
    switch (response.code()) {
        case HttpsURLConnection.HTTP_OK:
        case HttpsURLConnection.HTTP_CREATED:
        case HttpsURLConnection.HTTP_ACCEPTED:
        case HttpsURLConnection.HTTP_NOT_AUTHORITATIVE:

            Log.i(Constants.TAG, "ApiCallback switch()");
            if (response.body() != null) {
                Log.i(Constants.TAG, "ApiCallback response.body() != null" +
                        ": " + response.body());
                Log.i(Constants.TAG, "ApiCallback response.raw() != null" +
                        ": " + response.raw());
                Log.i(Constants.TAG, "ApiCallback response.message() != null" +
                        ": " + response.message());
                Log.i(Constants.TAG, "ApiCallback response.toString() != null" +
                        ": " + response.toString());
                Log.i(Constants.TAG, "ApiCallback response.isSuccessful() : " +
                        ": " + response.isSuccessful());

                if (response.body() instanceof PHRResponse) {
                    Log.i(Constants.TAG, "response.body() instanceof PHRResponse");
                    PHRResponse phrResponse = (PHRResponse) response.body();
                    Log.i(Constants.TAG, "response.body() instanceof PHRResponse data : " + phrResponse.data);
                    Log.i(Constants.TAG, "response.body() instanceof PHRResponse msg : " + phrResponse.msg);
                    Log.i(Constants.TAG, "response.body() instanceof PHRResponse status : " + phrResponse.status);
                    Log.i(Constants.TAG, "response.body() instanceof PHRResponse getErrorMessage : " + phrResponse.getErrorMessage());

                    if (!phrResponse.isSuccess() ){
                        onFail(new Throwable(phrResponse.getErrorMessage()));
                        return;
                    }
                }
                Log.i(Constants.TAG, "ApiCallback switch 1(): " + response.body());
                onSuccess(response.body());
                onSuccessCustomFunction(response.body());
            }
            break;
        case HttpsURLConnection.HTTP_FORBIDDEN:
            Log.i(Constants.TAG, "HTTP_FORBIDDEN switch 1()");
        case HttpsURLConnection.HTTP_UNAUTHORIZED:
            Log.i(Constants.TAG, "HTTP_UNAUTHORIZED switch 1()");
            doSessionTimeout();

// onUnauthorized();打破; default:Log.i(Constants.TAG,“default switch 1()”); onFail(new Throwable(response.code()+“”+ response.message())); }}

@Override
public void onFailure(Call<T> call, Throwable t) {
    Log.i(Constants.TAG, "onFailure switch 1()");

    doError(t.getMessage());
}

public abstract void onSuccess(T response);


//public abstract void onSuccess(PHRResponse<User> response);

public abstract void onFail(Throwable throwable);

private void doError(String error) {
    onFail(new Throwable(error));
}
}

注意:从android studio安装时工作正常,但是当我制作apk然后安装时崩溃了。

android exception apk retrofit okhttp
1个回答
1
投票

经过数小时的调试,问题的解决方案是:

从gradle中删除minify和resource shrink选项。有时它是由于反射API而发生的。

 debug {
        debuggable true
        //minifyEnabled true
        //shrinkResources true
    }
© www.soinside.com 2019 - 2024. All rights reserved.