web-dev-qa-db-fra.com

Volley ne faisant pas de demande sur la dernière version de Android

J'ai remarqué que mon application ne fonctionnait pas sur Pixel 3. Je suis entré dans Android studio et j'ai émulé quelques appareils et j'ai remarqué qu'elle ne fonctionnait sur aucun Android Pie) (API 28), mais fonctionne bien sur n'importe quel autre. J'ai mis quelques journaux dans tout mon code, et il semblait que je n'obtenais pas de réponse dans le cadre de mon utilisation de Volley. L'application elle-même se charge, mais n'affiche aucune donnée, et Je reçois une erreur

E/RecyclerView: aucun adaptateur attaché; sauter la disposition

Mon code est

import Android.content.Intent;
import Android.os.Bundle;
import Android.os.Handler;
import Android.util.Log;
import Android.support.v7.app.AppCompatActivity;
import Android.view.WindowManager;
import com.Android.volley.Request;
import com.Android.volley.Response;
import com.Android.volley.VolleyError;
import com.Android.volley.toolbox.StringRequest;
import com.Android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {
    DatabaseManagement db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        db = new DatabaseManagement(this);
        grabData();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent i = new Intent(MainActivity.this, com.hellapunk.hellapunk.feature.Main2Activity.class);
                startActivity(i);
                finish();
            }
        }, 3000);
    }

    public void grabData() {
        //Log.i("Made it", "You made it this far");
        String url = "http://hellapunk.com/listallshows.php?id=2018";
        StringRequest sr = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONArray showInfo = new JSONArray(response);
                    Log.i("Something", "response");
                    for (int i = 0; i < showInfo.length(); ++i) {
                        JSONObject showInfo1 = showInfo.getJSONObject(i);

                        if ((db.checkShow(showInfo1.getString("show_summary"),
                                showInfo1.getString("show_date"))) > 0) {
                            Log.i("Results", "Show already exists");
                        } else {
                            db.insertShows(showInfo1.getString("show_summary"),
                                    showInfo1.getString("venue_name"),
                                    showInfo1.getString("show_date"),
                                    showInfo1.getString("shows_img"),
                                    showInfo1.getString("venue_address"),
                                    showInfo1.getString("city_name"),
                                    showInfo1.getString("city_region"));
                        }
                    }
                } catch (Exception e) {
                    Log.i("Error", e.getMessage());
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.i("TAG", ""+error);
            }
        });
        Volley.newRequestQueue(this).add(sr);

    }
}

J'attrape les données pendant mon écran de démarrage et les stocke dans une base de données locale. Ensuite, il est appelé à partir de la base de données sur l'activité suivante. Tout conseil sera apprécié!

4
j_timko

Ou vous pouvez utiliser l'attribut usesCleartextTraffic sous l'élément d'application dans le manifeste Android. La valeur par défaut dans Android P est "false").

<application
     Android:usesCleartextTraffic="true"

</application>

mais il nécessite minSdkVersion 23 ou supérieur.

0
Aristo Michael

Pour ce problème, j'utilise https et cela fonctionne très bien maintenant

0
megyptm