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é!
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.
Pour ce problème, j'utilise https et cela fonctionne très bien maintenant