通过androidannotations注入Android @RestService导致nullPointerException

时间:2013-02-20 11:05:30

标签: android rest service null android-annotations

我这行上的gettin空指针异常wsresult = restClientInterface.skuska(); for restClientInterface。这是我的样本:

import org.springframework.http.converter.json.GsonHttpMessageConverter;

import com.googlecode.androidannotations.annotations.rest.Get;
import com.googlecode.androidannotations.annotations.rest.Rest;

@Rest(rootUrl = "http://my_ip_address/webresources", converters = {GsonHttpMessageConverter.class})
public interface RestClient {

    @Get("/persons")
    String skuska();    
}

我正在使用片段

    @EFragment
public class HomeFragment extends Fragment {

private Button ws;
private TextView wsstring;
private String wsresult;        

        @RestService
        RestClient restClientInterface;

        wsstring = (TextView) view.findViewById(R.id.wsstring);

                ws = (Button) view.findViewById(R.id.ws);
                ws.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        getWSResult();
                        wsstring.setText(wsresult);         
                    }
                });

                return view;
            }

            @Background
            public void getWSResult() {
                 wsresult = restClientInterface.skuska();       
            }

1 个答案:

答案 0 :(得分:2)

在片段准备就绪后,您的RestClient应该由AA正确注入。 你能复制/粘贴生成的类来看看发生了什么吗?

此外,您正在调用getWSResult()(这是一种背景方法),并在您在TextView中设置Rest调用的结果之后。但是,在尝试在对象中设置结果之前,您无法说明结果是否已到达。

你应该试试像这样的代码:

@EFragment(R.layout.homeFragment)
public class homeFragment extends Fragment {

    @ViewById
    Button ws;

    @ViewById
    TextView wsstring;

    @RestService
    RestClient restClientInterface;

    private String wsresult;

    @Click
    void wsstringClicked() {
        getWSResult();
    }

    @Background
    void getWSResult() {
        wsresult = restClientInterface.skuska();
    }

    @UiThread
    void updateUI() {
        wsstring.setText(wsresult);
    }
}

编辑:刚刚删除了private已注明字段

上的@ViewById

EDIT2:想一想。你是如何在活动中使用这个片段的? 您使用的是@FragmentById还是@FragmentByTag