0

Wenn ich Volley verwenden, um eine Anfrage an den Server zu senden, funktioniert es nicht und es wird ein Laufzeitfehler ausgegeben.String Request von FirebaseMessagingService mit Volley funktioniert nicht

public class MyFCMService extends FirebaseMessagingService { 
    String url, title, message; 
    String category_id; 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    super.onMessageReceived(remoteMessage); 
    title = remoteMessage.getData().get("title"); 
    message = remoteMessage.getData().get("message"); 

    String id = remoteMessage.getData().get("ID"); 

    if (check(id).equals("6")) { 
     sendNotification(title, message); 
    } else { 
     sendNotification("khalid", "khalid"); 
    } 
} 

public String check(String id) { 
    url = "http://www.tobeacademy.com/api/get_post/?post_id=" + id; 
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject jsonObject = new JSONObject(response); 
         JSONArray array = jsonObject.getJSONArray("post"); 
         category_id = array.getJSONObject(0).getString("id"); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
     } 
    }); 
    Volley.newRequestQueue(this).add(stringRequest); 

    return category_id; 
} 

Antwort

0

Volley-Anfragen werden asynchron abgeschlossen. Die Methode onResponse() Ihres Listeners wird erst ausgeführt, wenn die angeforderten Daten vom Server tobeacademy empfangen werden.

Das bedeutet, dass in Ihrer check() Methode der von category_id zurückgegebene Wert nicht gültig ist, da es zurückgegeben wird, bevor der Listener onResponse() es ausgeführt und definiert hat.

Sie müssen Ihren Code, so etwas Refactoring:

public void check(String id, final String title, final String message) { 
    url = "http://www.tobeacademy.com/api/get_post/?post_id=" + id; 

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        try { 
         JSONObject jsonObject = new JSONObject(response); 
         JSONArray array = jsonObject.getJSONArray("post"); 

         String category_id = array.getJSONObject(0).getString("id"); 

         if (category_id.equals("6")) { 
          sendNotification(title, message); 
         } else { 
          sendNotification("khalid", "khalid"); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
     } 
    }); 
    Volley.newRequestQueue(this).add(stringRequest); 
} 
Verwandte Themen