2016-04-06 14 views
0

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) 
+0

Doğrulamanızdan Can çalışması gerekir? Bunu, call.isSuccessful –

+0

denetleyerek yapabilirsiniz. Yanıtlama yöntemi – jaguar

+0

yürütülür Stacktrace'i basabilir misiniz? –

cevap

1

Kontrol tepki yapısı TMDB API tarafından iade edilen, ben 'genel' doğrudan bir kök nesne, böylece GSON dönüşüm olmayabilir düşünüyorum yanıt başarısız olabilir.

API yanıtı baktığımızda, sonuçlarına da StackOverFlowQuestion sınıfını değişken adını değiştirin veya json adı eşleştirmek için bir @SerializedName eklemek, o zaman api çağrısı başarılı olursa

+0

Değişken öğelere @SerializedName ("results") eklendi. Şuan çalışıyor. Bir ton teşekkürler. – jaguar

İlgili konular