Me di cuenta de mi aplicación no estaba trabajando en Pixel 3. entré en Android Studio y emulado unos dispositivos y se dio cuenta que no está funcionando en cualquier Pie Android (API 28) dispositivos, pero funciona bien en cualquier otro. Me puse unos troncos a lo largo de mi código, y parecía que yo no estaba recibiendo una respuesta dentro de mi uso del voleo. La aplicación en sí cargas, pero no muestra ningún dato, y recibo un error
E / RecyclerView: No hay ningún adaptador unido; diseño saltarse
Mi código es
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);
}
}
Agarro los datos durante mi pantalla de bienvenida y lo almacenan en una base de datos local. Entonces se le llama desde el PP en la siguiente actividad. ¡Cualquier consejo será apreciado!
Esto se debe a que a partir de Android P, todo el tráfico de red entre su aplicación y destinos inseguros debe estar en la lista blanca de forma explícita. Ver Proteger a los usuarios con TLS por defecto en Android P .
En su código, que está haciendo una solicitud a:
http://hellapunk.com/listallshows.php?id=2018
Los http://
espectáculos que el sitio no es seguro. Si uno profundiza en su LogCat es probable que encuentre un mensaje del tipo:
com.android.volley.NoConnectionError: java.io.IOException: Cleartext HTTP traffic to hellapunk.com not permitted
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:177)
at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)
Caused by: java.io.IOException: Cleartext HTTP traffic to hellapunk.com not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:99)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:131)
at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)
El intento yo mismo, no parece que los sustenta el sitio https
conexiones, por lo que con el fin de llegar a este servidor en particular de su aplicación, se necesitarían lista blanca del hellapunk.com
dominio manualmente.
En el directorio de recursos, definir un documento XML para la configuración de seguridad de la red (por ejemplo res/xml/network_security_config.xml
):
network_security_config.xml :
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">hellapunk.com</domain>
</domain-config>
</network-security-config>
Luego, en su AndroidManifest.xml
para su aplicación, en la <application>
etiqueta, añadir el atributo:
<application
android:networkSecurityConfig="@xml/network_security_config"
A continuación, debe ser permitido para hacer peticiones inseguros a cualquier dominio especificado dentro de ese archivo.