2017-09-20 4 views
0

J'ai eu une erreur quand je pars JSON avec la bibliothèque GSON à mon spinner android. l'erreur est:erreur lorsque vous essayez d'analyser JSON avec GSON à spinner android

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: BEGIN_OBJECT attendu, mais était STRING à la ligne 1 colonne 1 chemin $

quand je clique au chat journal studio android :

erreur à la ligne de code spinnerData = Arrays.asList(mGson.fromJson(response, Set_jadwal[].class));

C'EST complète mon code source:

public class jadwal_Activity extends AppCompatActivity { 

private String DATA_URL_KELAS = "http://smpn8pky.rf.gd/Json_kelas.php"; 
public static final String DATA_URL_JADWAL = "http://smpn8pky.rf.gd/Json_jadwal.php"; 
public List<Set_jadwal> spinnerData; 
private RequestQueue queue; 
Spinner spinner; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_jadwal); 

    queue = Volley.newRequestQueue(this); 
    requestJsonObject(); 
} 

private void requestJsonObject() { 
    RequestQueue queue = Volley.newRequestQueue(this); 
    StringRequest stringRequest = new StringRequest(Request.Method.GET, DATA_URL_KELAS, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      GsonBuilder builder = new GsonBuilder(); 
      Gson mGson = builder.create(); 
      spinnerData = Arrays.asList(mGson.fromJson(response, Set_jadwal[].class)); 
      //display first question to the user 
      if(null != spinnerData){ 
       spinner = (Spinner) findViewById(R.id.spiner_kelas); 
       assert spinner != null; 
       spinner.setVisibility(View.VISIBLE); 
       SpinnerAdapter spinnerAdapter = new SpinnerAdapter(jadwal_Activity.this, spinnerData); 
       spinner.setAdapter(spinnerAdapter); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
     } 
    }); 
    queue.add(stringRequest); 
} 

et c'est le lien vers ma réponse JSON JSON RESPON

+0

Que contient la réponse? Je suppose que vous obtenez un texte qui n'est pas json. – nbokmans

+0

que voulez-vous dire, je suis un peu moins compréhensif. Je veux analyser ce json à mon spinner .Que dois-je faire ce que mon code ??? –

+0

Lire ma réponse. Ce n'est pas un problème avec votre code mais avec votre hébergeur. – nbokmans

Répondre

0

Lorsque je tente de GET JSON à partir de votre URL à l'aide Postman (Google plug-in Chrome), la réponse me dit ceci:

Error

Cela signifie qu'à moins que le site ne désactive l'obligation de ne pas autoriser les demandes entrantes qui n'ont pas javascript, vous ne pourrez pas récupérer les données json. La raison pour laquelle les sites Web font généralement cela est d'éviter d'être spammé par des robots. Donc, pour clarifier: ce n'est pas un problème avec votre code, mais plutôt avec (votre/votre) webhost.

+0

hmmm .. je pense que vous avez raison. alors que dois-je faire? Y a-t-il un réglage pour corriger cela sur l'hébergement? J'utilise l'hébergement gratuit de https://infinityfree.net/ –

+0

Il n'y a probablement pas un paramètre qui vous permet de changer cela. C'est une mesure préventive qui a été mise en place par les administrateurs de la société d'hébergement gratuite. Je recommande de trouver votre propre hébergement (de préférence payé, mais peut être bon marché). – nbokmans

0

Dans votre exemple, vous essayez de convertir le tableau JSON en tableau de Set_jadwal et après en liste en utilisant Arrays.asList. Je pense que c'est redondant.

Utilisez GsonTypeToken pour convertir directement à la liste

String response = "[{\"kd_kelas\":\"KLS-1\",\"kelas\":\"VII-1\"},{\"kd_kelas\":\"KLS-2\",\"kelas\":\"VII-2\"},{\"kd_kelas\":\"KLS-3\",\"kelas\":\"VII-3\"},{\"kd_kelas\":\"KLS-4\",\"kelas\":\"VII-4\"},{\"kd_kelas\":\"KLS-5\",\"kelas\":\"VII-5\"},{\"kd_kelas\":\"KLS-6\",\"kelas\":\"VII-6\"},{\"kd_kelas\":\"KLS-7\",\"kelas\":\"VII-7\"},{\"kd_kelas\":\"KLS-8\",\"kelas\":\"VII-8\"},{\"kd_kelas\":\"KLS-9\",\"kelas\":\"VII-9\"},{\"kd_kelas\":\"KLS-10\",\"kelas\":\"VII-10\"},{\"kd_kelas\":\"KLS-11\",\"kelas\":\"VII-11\"},{\"kd_kelas\":\"KLS-12\",\"kelas\":\"VIII-1\"},{\"kd_kelas\":\"KLS-13\",\"kelas\":\"VIII-2\"},{\"kd_kelas\":\"KLS-14\",\"kelas\":\"VIII-3\"},{\"kd_kelas\":\"KLS-15\",\"kelas\":\"VIII-4\"},{\"kd_kelas\":\"KLS-16\",\"kelas\":\"VIII-5\"},{\"kd_kelas\":\"KLS-17\",\"kelas\":\"VIII-6\"},{\"kd_kelas\":\"KLS-18\",\"kelas\":\"VIII-7\"},{\"kd_kelas\":\"KLS-19\",\"kelas\":\"VIII-8\"},{\"kd_kelas\":\"KLS-20\",\"kelas\":\"VIII-9\"},{\"kd_kelas\":\"KLS-21\",\"kelas\":\"VIII-10\"},{\"kd_kelas\":\"KLS-22\",\"kelas\":\"VIII-11\"},{\"kd_kelas\":\"KLS-23\",\"kelas\":\"IX-1\"},{\"kd_kelas\":\"KLS-24\",\"kelas\":\"IX-2\"},{\"kd_kelas\":\"KLS-25\",\"kelas\":\"IX-3\"},{\"kd_kelas\":\"KLS-26\",\"kelas\":\"IX-4\"},{\"kd_kelas\":\"KLS-27\",\"kelas\":\"IX-5\"},{\"kd_kelas\":\"KLS-28\",\"kelas\":\"IX-6\"},{\"kd_kelas\":\"KLS-29\",\"kelas\":\"IX-7\"},{\"kd_kelas\":\"KLS-30\",\"kelas\":\"IX-8\"},{\"kd_kelas\":\"KLS-31\",\"kelas\":\"IX-9\"},{\"kd_kelas\":\"KLS-32\",\"kelas\":\"IX-10\"},{\"kd_kelas\":\"KLS-33\",\"kelas\":\"IX-11\"}]"; 

List<Set_jadwal> result = new Gson().fromJson(response, 
       new TypeToken<List<Set_jadwal>>() {}.getType()); 

Set_jadwal est:

public class Set_jadwal { 
    private String kd_kelas; 
    private String kelas; 
} 

Comme une note de côté, ce ne est pas une bonne pratique d'utiliser Set_jadwal comme nom de classe;)