Ошибка «Попытка получить длину нулевого массива» - PullRequest
1 голос
/ 26 мая 2019

Я получаю ошибку «Попытка получить длину нулевого массива».Я пытаюсь получить случайные кавычки, как показано ниже, по ссылке https://gturnquist -quoters.cfapps.io / api / random , когда я пытаюсь нажать кнопку: введите значение «success»
id 7цитата «Однако реальное преимущество Boot заключается в том, что это просто Spring. Это означает, что любой код, независимо от сложности, идет в любом направлении, я знаю, что это безопасная ставка».

MainActivity.java

public class MainActivity extends AppCompatActivity {

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


        btnCallRestApi = findViewById(R.id.btnCallRestApi);
        btnCallRestApi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //call Rest Api
                new HttpReqTask().execute();

            }
        });
    }
    private class HttpReqTask extends AsyncTask<Void, Void, Value[]> {
        @Override
        protected Value[] doInBackground(Void... params){
            try{
                String apiUrl = "https://gturnquist-quoters.cfapps.io/api/random";
                RestTemplate rest = new RestTemplate();
                rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
                Value[] quotes = rest.getForObject(apiUrl, Value[].class);
                return quotes;
            }catch (Exception ex){
                Log.e("Could not get Quotes",ex.getMessage());
            }
            return null;
        }
        protected void onPostExecute(Value[] quotes){
            super.onPostExecute(quotes);
            for(Value v:quotes){
                Log.i("id: ", String.valueOf(v.getId()));
                Log.i("quote: ", v.getQuote());
            }
        }
    }
}

Quote.java

 public Quote() {
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Value getValue() {
        return value;
    }

    public void setValue(Value value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Quote{" +
                "type='" + type + '\'' +
                ", value=" + value +
                '}';
    }

Value.java

 public Value() {
    }

    public Long getId() {
        return this.id;
    }

    public String getQuote() {
        return this.quote;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setQuote(String quote) {
        this.quote = quote;
    }

    @Override
    public String toString() {
        return "Value{" +
                "id=" + id +
                ", quote='" + quote + '\'' +
                '}';
    }

1 Ответ

0 голосов
/ 26 мая 2019

вы пытаетесь сделать цикл с нулевым массивом, который вызывает NPE, попробуйте обработать его с помощью try/catch предложения

 protected void onPostExecute(Value[] quotes){
            super.onPostExecute(quotes);   
    try {
        for(Value v:quotes){
            Log.i("id: ", String.valueOf(v.getId()));
            Log.i("quote: ", v.getQuote());
        }
    } catch (NullPointerException e) {
        System.out.print("Caught the NullPointerException");
    }

edit дляновый выпуск:

я думаю, что вы неправильно читаете JSON OBJECT!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...