简体   繁体   English

Android / Java改造:Class无法转换为Callback

[英]Android/Java retrofit: Class cannot be converted to Callback

I'm new to retrofit and i am trying te get a json response to an object called RootObject . 我是新手,我正在尝试获取一个名为RootObject的对象的json响应。 The error that i am stuck with is : 我坚持的错误是:

"Error:(21, 44) error: incompatible types: NewsController cannot be converted to Callback>" “错误:(21,44)错误:不兼容的类型:NewsController无法转换为Callback>”

Does someone now my mistake here? 现在有人在我这里犯了错误吗? thanks in regards! 谢谢你!

public class NewsController {
        public void getNews(){
            Retrofit retrofit = new Retrofit.Builder().baseUrl("apilink").addConverterFactory(GsonConverterFactory.create()).build();
            GetNewsService service = retrofit.create(GetNewsService.class);
            try {
                service.GetNewsItems().enqueue(this); //asynchronous
                Response<List<RootObject>> response = service.GetNewsItems().execute(); //synchronous
            }
            catch (IOException e){

            }
        }
}

class to put the data: 用于放置数据的类:

public class RootObject implements Serializable {
   public ArrayList<Result> results ;
   public int nextId;

    public ArrayList<Result> getResults() { return results; }
    public int getNextId() { return nextId; }

    public String toString() {
        return String.format("JEEJ" + nextId);
    }
}

Interface: 接口:

public interface GetNewsService {
    @GET("/Articles")
    Call<List<RootObject>> GetNewsItems();
}

First of all, change your interface to this: 首先,将您的界面更改为:

public interface GetNewsService { 
  @GET("/Articles") 
  void GetNewsItems(Callback<List<RootObject>> cb);
}

Also change your newsController class. 还要更改你的newsController类。

public class NewsController {
    private RestAdapter restAdapter;
    static final String API_URL = "[Enter your API base url here]";
    public void getNews(){
        OkHttpClient mOkHttpClient = new OkHttpClient();
        mOkHttpClient.setConnectTimeout(15000,TimeUnit.MILLISECONDS);
        mOkHttpClient.setReadTimeout(15000,TimeUnit.MILLISECONDS);
        restAdapter = new RestAdapter.Builder().setEndpoint(API_URL).setClient(new OkClient(mOkHttpClient)).setLogLevel(RestAdapter.LogLevel.FULL) .build();
        GetNewsService service = restAdapter.create(GetNewsService.class);

        Callback<List<RootObject> cb = new Callback<List<RootObject>>() {
          @Override 
          public void success(List<RootObject> rootObjectList, Response response) { 
             //whatever you want to do with the fetched news items
          } 

          @Override 
          public void failure(RetrofitError error) { 
            //whatever you want to do with the error
          } 
        };
        service.GetNewsItems(cb);    
    }
}

You'll need to add the following dependencies in your build.gradle : 您需要在build.gradle添加以下依赖build.gradle

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'com.squareup.okhttp:okhttp:2.4.0'

@megh vidani's answer works, but he had you switch your code from Retrofit 2 to Retrofit 1. Here is how to do it in Retrofit 2. You would need to go back to your original gradle settings, etc. -- @megh vidani的回答是有效的,但是他让你将代码从Retrofit 2切换到Retrofit 1.以下是如何在Retrofit 2中进行操作。你需要回到原来的gradle设置等 -

public class NewsController {
    public void getNews(){
        Retrofit retrofit = new Retrofit.Builder().baseUrl("apilink").addConverterFactory(GsonConverterFactory.create()).build();
        GetNewsService service = retrofit.create(GetNewsService.class);
        service.GetNewsItems().enqueue(new Callback<List<RootObject>>()  {
            @Override
            public void onResponse(Response<List<RootObject>> response) { 
                // Handle your response
                // Note HTTP errors are delivered here, you can check
                // response.isSuccess() or response.code() to determine
                // HTTP failures
            }

            @Override
            public void onFailure(Throwable t) {
                // Network errors
            }
        });
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM