5

Android アプリケーションでボレー ライブラリを試してみます

これは私のログです

    10-31 14:30:09.277: E/AndroidRuntime(22916): java.lang.NullPointerException
10-31 14:30:09.277: E/AndroidRuntime(22916):    at com.mypackage.api.Api$2.onErrorResponse(Api.java:269)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at com.android.volley.Request.deliverError(Request.java:517)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at android.os.Handler.handleCallback(Handler.java:615)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at android.os.Looper.loop(Looper.java:137)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at android.app.ActivityThread.main(ActivityThread.java:4745)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at java.lang.reflect.Method.invokeNative(Native Method)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at java.lang.reflect.Method.invoke(Method.java:511)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-31 14:30:09.277: E/AndroidRuntime(22916):    at dalvik.system.NativeStart.main(Native Method)

これがボレーの使い方です

    GetStringRequest req = new GetStringRequest(Request.Method.GET,URL_API,
    new Response.Listener<String>() {
    // handle success response
    }, new Response.ErrorListener() {
    //handle error response
    @Override
public void onErrorResponse(VolleyError volleyError) {

    try {
        String error = new String(volleyError.networkResponse.data, HTTP.UTF_8);
        }
        catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
        }
    });

時々、この行でエラー nullPointerException が発生します (269)

String error = new String(volleyError.networkResponse.data, HTTP.UTF_8);

私は何が間違っているのか分かりません、誰か知っていますか?

4

3 に答える 3

4

volleyError.networkResponse.data が空である可能性があります。このコード行で何を得ようとしているのかはわかりませんが、Volley で作業していて、volleyError の内容を確認したいと考えています。これを試すことができます:

String error =  volleyError.toString();

次に、この文字列に特定のエラーがないかどうかを確認できます [少なくとも私はそうしています]。VolleyErrors は、タイムアウト エラー、接続エラー、サーバー エラーなど、API によって定義された数少ないエラーの 1 つです。もちろん、特定のエラーに基づいて他のアクションを起動する場合は、文字列をさらに解析する必要があります。

于 2013-11-01T02:56:28.430 に答える
3

一部のデバイスでは onErrorResponse の応答が異なるようです

onErrorResponse はいくつかのデバイスで null を返しました (これがクラッシュの原因でした)

  new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    if(error.getMessage==NULL){
  Toast.makeText(cardview.this, "Failed to retrieve data", Toast.LENGTH_LONG).show();
                    }
                else{
                        Toast.makeText(cardview.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
                    }

                });

私も同じエラーが発生しました..デバイスによって異なります.一部のデバイスではnullpointer例外が発生しない場合があります。

于 2016-10-21T06:27:39.787 に答える