Yenileme API'sinde yeniyim ve bununla mücadele ediyorum. the tutorial on Vogella'u izledim ve StackExchange'dan veri alıp liste görünümünde görüntüledim. Ancak, TMDB'dan veri almaya çalıştığımda aşağıdaki hatayı alıyorum. İşte Güçlendirme api ile ilgili sorunların karşılanması. Hata: java.lang.NullPointerException: Bir null nesne referansı üzerinde arabirim yöntemini çağırmayı denemek
java.lang.NullPointerException: Attempt to invoke interface method
'java.lang.Object[] java.util.Collection.toArray()' on a null object reference,
bir liste görünümünde Stack Exchange url'den "başlığı" gösterilecek kodu (bu iyi çalışıyor) 'dir.
MainActivity
public class MainActivity extends ListActivity implements Callback<StackOverflowQuestion> {
ArrayAdapter<Question> madapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
madapter=new ArrayAdapter<Question>(this,android.R.layout.simple_list_item_1,android.R.id.text1,new ArrayList<Question>());
setListAdapter(madapter);
Retrofit retrofit= new Retrofit.Builder()
.baseUrl("http://api.stackexchange.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
StackOvreflowAPI stackOverflowAPI = retrofit.create(StackOvreflowAPI.class);
Call<StackOverflowQuestion> call = stackOverflowAPI.load();
call.enqueue(this);
}
@Override
public void onResponse(Response<StackOverflowQuestion> response, Retrofit retrofit) {
ArrayAdapter<Question> adapter = (ArrayAdapter<Question>) getListAdapter();
adapter.clear();
adapter.addAll(response.body().items);
}
@Override
public void onFailure(Throwable t) {
}
}
Model sınıfı: Soru
public class Question {
public String name;
@Override
public String toString() {
return (name);
}
}
StackOverflowQuestion
public class StackOverflowQuestion {
List<Question> items;
}
StackOverflowAPI
public interface StackOvreflowAPI {
@GET("/2.2/questions?order=desc&sort=activity&tagged=android&site=stackoverflow")
Call<StackOverflowQuestion> load();
}
Ama TMDB url
overview
almak için aynı kodu kullandığımda hata alıyorum:
java.lang.NullPointerException: Attempt to invoke interface method
'java.lang.Object[] java.util.Collection.toArray()' on a null object reference.
Sadece URL, arayüzü ve değişti model sınıfı. MainActivity yapılan
değişiklikler:
Retrofit retrofit= new Retrofit.Builder()
.baseUrl("https://api.themoviedb.org")
.addConverterFactory(GsonConverterFactory.create())
.build();
yerine .baseUrl("https://api.stackexchange.com")
ait .baseUrl("https://api.themoviedb.org")
kullanma. Arayüz yapılan
değişiklikler:
public class Question {
public String overview;
@Override
public String toString() {
return (overview);
}
}
için title
Değişen:
public interface StackOvreflowAPI {
@GET("/3/movie/popular?api_key=ab5aee0b18da89dd9e026d35754c24f1")
Call<StackOverflowQuestion> load();
}
yerine Soru sınıfında yapılan @GET("/2.2/questions?order=desc&sort=activity&tagged=android&site=stackoverflow")
Değişiklikler @GET("/3/movie/popular?api_key=ab5aee0b18da89dd9e026d35754c24f1")
kullanma.
Ama hata ile bu uygulama çöküyor çalıştıran
:FATAL EXCEPTION: main
Process: com.example.maver_000.practise_retrofit, PID: 4270
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
at java.util.ArrayList.addAll(ArrayList.java:188)
at android.widget.ArrayAdapter.addAll(ArrayAdapter.java:195)
at com.example.maver_000.practise_retrofit.MainActivity.onResponse(MainActivity.java:40)
at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5294)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
Doğrulamanızdan Can çalışması gerekir? Bunu, call.isSuccessful –
denetleyerek yapabilirsiniz. Yanıtlama yöntemi – jaguar
yürütülür Stacktrace'i basabilir misiniz? –