android volley和asynchttpclient在真实设备上失败,但在模拟器上工作

如何解决android volley和asynchttpclient在真实设备上失败,但在模拟器上工作

大家好,我只是制作了一个使用ICS_OPENVPN库的android应用,但是当我使用SplashActivity检查更新应用时,在模拟器上运行了Currect,但是当我生成签名的APK并将其安装在真实设备上时,它并没有切换到MainActivity。

SplashActivity.java

package com.orangevpninfo.orangevpn;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Toast;
import com.airbnb.lottie.LottieAnimationView;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolBox.JsonObjectRequest;
import com.android.volley.toolBox.JsonRequest;
import com.android.volley.toolBox.Volley;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.orangevpninfo.orangevpn.models.Version;
import cz.msebera.android.httpclient.Header;
import org.json.JSONArray;
import org.json.JSONObject;

public class SplashActivity extends AppCompatActivity {

    LottieAnimationView la_animation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        la_animation=findViewById(R.id.la_animation2);
        startAnimation(SplashActivity.this,R.id.la_animation2,R.anim.fade_in_1000,true);
        la_animation.cancelAnimation();
        la_animation.setAnimation(R.raw.loading2);
        la_animation.playAnimation();


        checkupdate2("1");




    }
    private void download(final String Link){
        AlertDialog alertDialog = new AlertDialog.Builder(SplashActivity.this).create();
        alertDialog.setTitle("New Version Available");
        alertDialog.setMessage("There is a New version of this App! Please select Update to Download directly new version and install it");
        alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL,"Not Now",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int which) {
                        dialog.dismiss();
                        finish();
                    }
                });
        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE,"Update",int which) {
                        Intent a=new Intent(Intent.ACTION_VIEW,Uri.parse(Link));
                        startActivity(a);
                        finish();
                    }
                });
        alertDialog.show();
        //Intent i = new Intent(Intent.ACTION_VIEW);
        //i.setData(Uri.parse(Link));
        //startActivity(i);
    }

    private void checkupdate2(final String version){


        Request<JSONObject> jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,"http://51.89.45.117/version/version.json",null,new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("Success",response.toString());
                Version ver=new Gson().fromJson(response.toString(),Version.class);
                if (ver.getVersion().equals(version)){
                    Intent a=new Intent(SplashActivity.this,MainActivity.class);
                    startActivity(a);
                    finish();

                }else{
                    download(ver.getLink());
                }
            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("Error",error.toString());

            }

        });
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
         requestQueue.add(jsonObjectRequest);

    }
    private void checkupdate(final String version){
        String url="http://51.89.45.117/version/version.json";
        AsyncHttpClient client = new AsyncHttpClient();
        client.setConnectTimeout(30);
        client.get(this,url,new JsonHttpResponseHandler(){
            @Override
            public void onSuccess(int statusCode,Header[] headers,JSONArray response) {
                super.onSuccess(statusCode,headers,response);

                Version[] ver=new Gson().fromJson(response.toString(),Version[].class);
                if (ver[0].getVersion().equals(version)){
                    Intent a=new Intent(SplashActivity.this,MainActivity.class);
                    startActivity(a);
                    finish();

                }else{

                    download(ver[0].getLink());
                }

            }

            @Override
            public void onSuccess(int statusCode,JSONObject response) {
                super.onSuccess(statusCode,response);
                Version ver=new Gson().fromJson(response.toString(),MainActivity.class);
                    startActivity(a);
                    finish();

                }else{
                    download(ver.getLink());
                }
            }

            @Override
            public void onFailure(int statusCode,Throwable throwable,JSONArray errorResponse) {
                super.onFailure(statusCode,throwable,errorResponse);

                Version[] ver=new Gson().fromJson(errorResponse.toString(),MainActivity.class);
                    startActivity(a);
                    finish();

                }else{

                    download(ver[0].getLink());
                }

            }

            @Override
            public void onFailure(int statusCode,JSONObject errorResponse) {
                super.onFailure(statusCode,errorResponse);
                Toast.makeText(SplashActivity.this,"success Jobj",Toast.LENGTH_SHORT).show();
                Version ver=new Gson().fromJson(errorResponse.toString(),MainActivity.class);
                    startActivity(a);
                    SplashActivity.this.finish();

                }else{
                    download(ver.getLink());
                }

            }

            @Override
            public void onFailure(int statusCode,String responseString,Throwable throwable) {
                super.onFailure(statusCode,responseString,throwable);
                Intent a=new Intent(SplashActivity.this,MainActivity.class);
                startActivity(a);
                SplashActivity.this.finish();
            }

            @Override
            public void onSuccess(int statusCode,String responseString) {
                super.onSuccess(statusCode,responseString);
                Intent a=new Intent(SplashActivity.this,MainActivity.class);
                startActivity(a);
                SplashActivity.this.finish();
            }
        });
    }
    public void startAnimation(Context ctx,int view,int animation,boolean show) {
        final View Element = findViewById(view);
        if (show) {
            Element.setVisibility(View.VISIBLE);
        } else {
            Element.setVisibility(View.INVISIBLE);
        }
        Animation anim = AnimationUtils.loadAnimation(ctx,animation);
        Element.startAnimation(anim);
    }
}


Crashlytics中的排球错误

Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
com.orangevpninfo.orangevpn.SplashActivity$3.onResponse (SplashActivity.java:17)
com.android.volley.toolBox.JsonRequest.deliverResponse (JsonRequest.java:17)
com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run (ExecutorDelivery.java:2)
android.os.Handler.handleCallback (Handler.java:751)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:154)
android.app.ActivityThread.main (ActivityThread.java:6138)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:893)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:783)

AsyncHttpClient错误Crashlytics

Fatal Exception: java.lang.RuntimeException
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
com.loopj.android.http.AsyncHttpResponseHandler.onUserException (AsyncHttpResponseHandler.java:28)
com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage (AsyncHttpResponseHandler.java)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:154)
android.app.ActivityThread.main (ActivityThread.java:6138)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:893)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:783)
Caused by java.lang.NullPointerException
Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
com.orangevpninfo.orangevpn.SplashActivity$4.onFailure (SplashActivity.java)
com.loopj.android.http.JsonHttpResponseHandler.onFailure (JsonHttpResponseHandler.java:19)
com.loopj.android.http.AsyncHttpResponseHandler.handleMessage (AsyncHttpResponseHandler.java:19)
com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage (AsyncHttpResponseHandler.java)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:154)
android.app.ActivityThread.main (ActivityThread.java:6138)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:893)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:783)

解决方法

您收到的响应似乎为null或ver.getVersion()也可能返回null。由于ver.getVersion().equals(version)上有一个空指针异常。

您可以尝试的两种可能的方法-

  1. 您是否在发布时打开ProGaurd?如果是,请在Version模型类中添加规则或添加@Keep注释。

  2. 如果选中了第一步,则必须检查来自服务器的响应是否有效。检查有效响应始终是一个好习惯。只需添加if (response == null)并使用日志调试代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?