J'avais mon application Android opérationnelle ( Activité principale ) , J'avais utilisé une liste de données à afficher depuis Internet (également ajoutée), lorsque je clique dessus pour l'activité suivante ( PokeActivity ), j'obtiens l'erreur dans LogCat as "java.net.MalformedURLException: tentative d'appeler la méthode virtuelle 'int java.lang.String.length ()' sur une référence d'objet nulle"

Le code dans PokeActivity


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class PokemonActivity extends AppCompatActivity {
    private TextView nameTextView;
    private TextView numberTextView;
    private TextView type1TextView;
    private TextView type2TextView;
    private String url;
    private RequestQueue requestQueue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pokemon);

        requestQueue= Volley.newRequestQueue(getApplicationContext());
        String url = getIntent().getStringExtra("url");
        nameTextView = findViewById(R.id.pokemon_name);
        numberTextView= findViewById(R.id.pokemon_number);
        type1TextView=findViewById(R.id.pokemon_type1);
        type2TextView=findViewById(R.id.pokemon_type2);
        load();

    }
    public void load (){
        type1TextView.setText("");
        type2TextView.setText("");
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    nameTextView.setText(response.getString("name"));
                    nameTextView.setText(String.format("#%3d",response.getInt("id")));
                    JSONArray typeEntries = response.getJSONArray("types");
                    for(int i = 0 ;i < typeEntries.length();i++){
                        JSONObject typeEntry = typeEntries.getJSONObject(i);
                        int slot = typeEntry.getInt("slot");
                        String type = typeEntry.getJSONObject("type").getString("name");
                        if(slot==1){
                            type1TextView.setText(type);
                        }else if(slot==2){
                            type2TextView.setText(type);
                        }
                    }
                } catch (JSONException e) {
                    Log.e("cs50", "Pokemon Json error", e);
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("cs50","pokemon details error", error);
            }
        });
    requestQueue.add(request);
    }
}```
0
vishal N 31 août 2020 à 10:43

2 réponses

Meilleure réponse

Il s'agissait d'une erreur due à la réinitialisation de l'URL dans la classe en tant que URL de chaîne supprimer simplement la chaîne effacera l'erreur.

Code qui a causé une erreur: String url = getIntent().getStringExtra("url");

Code correct: url = getIntent().getStringExtra("url"); Puisque l'url est déjà définie et passée d'une autre classe.

0
vishal N 31 août 2020 à 11:49

Mauvaise URL null signifie que l'URL est incorrecte ou que l'URL de la variable n'a aucune valeur (signifie une chaîne vide). Vous obtenez l'URL de l'activité précédente. Vérifiez si l'URL est correcte ou non par Logcat.

0
G Ganesh 31 août 2020 à 11:23