2017-07-19 4 views
1

私は自分のアプリでgoogle/volleyを実装しました。私はアプリケーションをコード化するとき、私は誤ってURLアドレスを誤って入力し、アプリケーションは突然クラッシュします。だから私はこの種の問題を避けることができます。以下は私が使ったコードです。google/volley URLが存在しないときにアプリケーションがクラッシュする

String url_login = "http://10.0.2.2/test_sstem/public/login"; 

    //Send Post data and retrieve server respond 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, url_login, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Toast.makeText(LoginActivity.this,"On Response "+response,Toast.LENGTH_LONG).show(); 
        ValidateLogin(response); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        NetworkResponse networkResponse = error.networkResponse; 
        if (networkResponse != null && networkResponse.data != null) { 
         String jsonError = new String(networkResponse.data); 
         String message_response=null; 
         try { 
          JSONObject object = new JSONObject(jsonError); 
          message_response= object.getString("error"); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
         Toast.makeText(LoginActivity.this, "On Error " + message_response.toString(), Toast.LENGTH_LONG).show(); 
         showProgress(false); 
        } 
       } 
      }) 

は、私はそれがURLを補正することにより固定することができます知っているが、何URLが生きていると私たちはこの問題を回避んどのように動作していない場合。

+0

スタックをポストできますか? – Vyacheslav

+0

@Vyacheslavスタック期間はどういう意味ですか?私は本当に知りません – Gooner

+0

私はアンドロイドスタジオのlogcatに表示されるクラッシュの瞬間にスタックトレースを意味します – Vyacheslav

答えて

2

私は私のために働いているボレーのためにベローメソッドを使用している..私は間違ったアドレスを使用しているが、私のアプリは停止しません。完全な方法を使用してください。

private void doLoginAction() { 

    pDialog.show(); 
    String url_login = "http://10.0.2.2/test_sstem/public/login"; 


    StringRequest stringRequest = new StringRequest(Request.Method.POST, url_login, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        //pDialog.dismiss(); 


        try { 
         JSONObject jsonObject = new JSONObject(response); 
         JSONArray loginNodes = jsonObject.getJSONArray("ParentNode"); 
         for (int i = 0; i < loginNodes.length(); i++) { 
          JSONObject jo = loginNodes.getJSONObject(i); 
          String key1 = jo.getString("key1"); 
          String key2 = jo.getString("key2"); 



         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 


       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        pDialog.dismiss(); 
        try { 

         if (error instanceof TimeoutError) { 
          //Time out error 

         }else if(error instanceof NoConnectionError){ 
          //net work error 

         } else if (error instanceof AuthFailureError) { 
          //error 

         } else if (error instanceof ServerError) { 
          //Erroor 
         } else if (error instanceof NetworkError) { 
          //Error 

         } else if (error instanceof ParseError) { 
          //Error 

         }else{ 
          //Error 
         } 
         //End 


        } catch (Exception e) { 


        } 

       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<>(); 
      params.put("uname", "[email protected]"); 
      params.put("pass", "123456"); 



      return params; 
     } 

    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 
+0

私はそれらのonErrorResponseブロックを試してみて、それは多くのおかげで多くの感謝の仕事をした – Gooner

1

ありの理由間違ったURLを、なぜあなたのアプリケーションがクラッシュの番号にすることができ、1はホストがアン解決可能である、あなたは以下のコードを使用することによって、URLの有効性を確認することができていることが考えられます。

URLUtil.isValidUrl(url) 
+0

はい、URLはlaravel apiによってルーティングされず、クラッシュするアプリケーションが発生します。しかし、url形式が正しいかどうかを確認するためにあなたが与えたメソッド。 – Gooner

関連する問題