【问题标题】:API Call in Android StudioAndroid Studio 中的 API 调用
【发布时间】:2022-01-13 14:16:46
【问题描述】:

我是使用 android studio 的新手,我正在尝试使用 volley 在 Android Studio 中进行 API 调用。我已经设置了一个按钮来进行 API 调用,但是当点击应用程序崩溃时。我使用的 API 还使用了一个密钥,在其文档中说:“对 API 的所有请求都必须包含 X-AUTH-TOKEN HTTP 标头。此标头必须包含您的身份验证令牌。”我真的不明白为什么单击按钮时应用程序会崩溃。


   private RequestQueue queue;
   private JSONArray getText;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     queue = Volley.newRequestQueue(this);
    }
 
   private StringRequest searchNameStringRequest(String nameSearch) {
        final String API = "&X-AUTH-TOKEN=<<rfrzsucnc7eo3m5hcmq6ljdzda1lz793>>";
        final String NAME_SEARCH = "&getText=";
        final String URL_PREFIX = "https://v1.motorapi.dk";

        String url = URL_PREFIX + API + NAME_SEARCH + nameSearch;

                final StringRequest stringRequest;
                stringRequest = new StringRequest(Request.Method.GET, url,

                response -> {
                                 try {
                        JSONObject result = new JSONObject(response).getJSONObject("list");
                        int maxItems = result.getInt("end");
                        JSONArray resultList = result.getJSONArray("item");

                  
                    } catch (JSONException e) {
                        Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                }, 
                error -> {
               
                    Toast.makeText(MainActivity.this, "Motorregister dosen’t answer.”, Toast.LENGTH_LONG).show();
                });

        return stringRequest;
    }

    public void button(View view) {
   
        queue.cancelAll(this);

        StringRequest stringRequest = searchNameStringRequest(getText.toString());
        stringRequest.setTag(this);

        queue.add(stringRequest);
    }

编辑这里是崩溃日志:

12/08 18:08:32: Launching 'app' on Pixel C API 29.
Install successfully finished in 1 s 791 ms.
$ adb shell am start -n "com.example.myapplication/com.example.myapplication.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 5893 on device 'Pixel_C_API_29 [emulator-5554]'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)
D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
W/RenderThread: type=1400 audit(0.0:19): avc: denied { write } for name="property_service" dev="tmpfs" ino=7291 scontext=u:r:untrusted_app:s0:c147,c256,c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0 app=com.example.myapplication
W/e.myapplicatio: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
W/e.myapplicatio: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
D/HostConnection: HostConnection::get() New Host Connection established 0xd5a9e040, tid 5931
D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_YUV_Cache ANDROID_EMU_sync_buffer_data GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 
W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
D/EGL_emulation: eglCreateContext: 0xe1113980: maj 3 min 0 rcv 3
D/EGL_emulation: eglMakeCurrent: 0xe1113980: ver 3 0 (tinfo 0xd5ace1d0)
W/Gralloc3: mapper 3.x is not supported
D/HostConnection: createUnique: call
D/HostConnection: HostConnection::get() New Host Connection established 0xd5a9f850, tid 5931
D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_YUV_Cache ANDROID_EMU_sync_buffer_data GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 
D/eglCodecCommon: allocate: Ask for block of size 0x1000
D/eglCodecCommon: allocate: ioctl allocate returned offset 0x3ffff6000 size 0x2000
D/EGL_emulation: eglMakeCurrent: 0xe1113980: ver 3 0 (tinfo 0xd5ace1d0)
I/AssistStructure: Flattened final assist data: 1576 bytes, containing 1 windows, 9 views
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 5893
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:446)
        at android.view.View.performClick(View.java:7125)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441)
        at android.view.View.performClick(View.java:7125) 
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 
        at android.view.View.performClickInternal(View.java:7102) 
        at android.view.View.access$3500(View.java:801) 
        at android.view.View$PerformClick.run(View.java:27336) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONArray.toString()' on a null object reference
        at com.example.myapplication.MainActivity.button(MainActivity.java:84)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441) 
        at android.view.View.performClick(View.java:7125) 
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 
        at android.view.View.performClickInternal(View.java:7102) 
        at android.view.View.access$3500(View.java:801) 
        at android.view.View$PerformClick.run(View.java:27336) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
I/Process: Sending signal. PID: 5893 SIG: 9

【问题讨论】:

  • 请与我们分享您的崩溃日志。
  • 强烈推荐使用改造网络通信。
  • 我们需要崩溃日志。但是,除非 Volley 具有您绝对需要的功能,否则我会避免使用它。它有很多你需要编写的样板,并且它有一些糟糕的实现问题。特别是不要通过它下载大文件-它将所有数据保存在内存中的字符串中,因此下载几百兆的文件可能会使您崩溃
  • 在哪里可以找到崩溃日志?

标签: android android-studio android-volley


【解决方案1】:

您的崩溃与 Volley 无关。您的 onclick 尝试调用 getText.toString,但您从未设置 getText 的值,因此它为空。然后你取消引用它。您需要设置 getText 的值,并且您可能还需要在那里进行空检查。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2020-05-24
    • 2021-12-27
    • 2020-12-12
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2019-10-05
    • 2021-10-05
    相关资源
    最近更新 更多