Android 改装从web获取数据抛出空对象引用
我试图从web api获取数据,但有些地方出了问题,我无法解决 我的JSON看起来像这样Android 改装从web获取数据抛出空对象引用,android,retrofit2,Android,Retrofit2,我试图从web api获取数据,但有些地方出了问题,我无法解决 我的JSON看起来像这样 { "partners": [ "partner1", "partner2", "partner3", ... , "partner150" ] } 我有TablePartners(ActiveAndroid),我想在其中保存api中的所有合作伙伴 @Table(name = "Partners") public class Partners exten
{
"partners":
[
"partner1",
"partner2",
"partner3",
... ,
"partner150"
]
}
我有TablePartners(ActiveAndroid),我想在其中保存api中的所有合作伙伴
@Table(name = "Partners")
public class Partners extends Model {
@Column(name = "Name")
String name;
public Partners() {}
public Partners(String name) {
this.name = name;
}
}
以下是我的Pojo模型类:
public class Partners extends ArrayList<String> {
@SerializedName("partners")
@Expose
public List<String> partners = new ArrayList<String>();
public List<String> getPartners() {
return partners;
}
public void setName(List<String> partners) {
this.partners = partners;
}
在这个片段中,我有一个按钮,我想在这个按钮上实现onClick方法,从API获取数据并将其保存到Partners表中
public class DownloadMain extends Fragment implements Callback<Partners> {
private Button dloadPartners;
private Call<Partners> callPartners;
public static APIService apiService;
public DownloadMain() {}
public DownloadMain newInstance() { return new DownloadMain(); }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.download_main, container, false);
dloadPartners = (Button) view.findViewById(R.id.downloadPartners);
dloadPartners.setOnClickListener(btnListener);
callPartners = APIHelper.getApiService().getPartners();
callPartners.enqueue(this);
return view;
}
Button.OnClickListener btnListener = (new View.OnClickListener() {
@Override
public void onClick(View v) {
APIHelper helper = new APIHelper();
apiService = helper.getApiService();
Call<Partners> call = apiService.getPartners();
call.enqueue(new Callback<Partners>() {
@Override
public void onResponse(Call<Partners> call, Response<Partners> response) {
APIHelper helper = new APIHelper();
helper.getApiService();
Call<Partners> call = apiService.getPartners();
call.enqueue(new Callback<Partners>() {
@Override
public void onResponse(Call<Partners> call, Response<Partners> response) {
List<String> partners = response.body().getPartners();
Log.d(TAG, "Number of partners received: " + partners.size());
/*if (response.body() != null) {
ArrayList<String> partnersList;
partnersList = response.body();
Log.d("DOWNLOAD", String.valueOf(partnersList));
}*/
}
@Override
public void onFailure(Call<Partners> call, Throwable t) {
Toast.makeText(getActivity(), "FAIL!!!", Toast.LENGTH_SHORT).show();
}
});
}
});
@Override
public void onResponse(Call<Partners> call, Response<Partners> response) {
}
@Override
public void onFailure(Call<Partners> call, Throwable t) {
}
}
public类DownloadMain扩展片段实现回调{
私人按钮下载合作伙伴;
私人通话伙伴;
公共服务;
公共下载main(){}
public DownloadMain newInstance(){返回新的DownloadMain();}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.download\u main,container,false);
dloadPartners=(按钮)view.findviewbyd(R.id.downloadPartners);
dloadPartners.setOnClickListener(btnListener);
callPartners=APIHelper.getApiService().getPartners();
callPartners.enqueue(这个);
返回视图;
}
Button.OnClickListener btnListener=(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
APIHelper=新的APIHelper();
apiService=helper.getApiService();
Call Call=apiService.getPartners();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
APIHelper=新的APIHelper();
getApiService();
Call Call=apiService.getPartners();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
List partners=response.body().getPartners();
Log.d(标记“接收的合作伙伴数:”+partners.size());
/*if(response.body()!=null){
ArrayList partnersList;
partnersList=response.body();
Log.d(“下载”,String.valueOf(partnersList));
}*/
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getActivity(),“FAIL!!!”,Toast.LENGTH\u SHORT.show();
}
});
}
});
@凌驾
公共void onResponse(调用、响应){
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
}
这是我的问题。一切正常,并没有错误,但当我点击按钮时,什么也并没有发生
所以我认为我犯了一些错误,但我无法理解(第一次做改装)
我想要的是点击按钮从web获取所有合作伙伴,并将其保存到我的合作伙伴表中
public class DownloadMain extends Fragment implements Callback<Partners> {
private Button dloadPartners;
private Call<Partners> callPartners;
public static APIService apiService;
public DownloadMain() {}
public DownloadMain newInstance() { return new DownloadMain(); }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.download_main, container, false);
dloadPartners = (Button) view.findViewById(R.id.downloadPartners);
dloadPartners.setOnClickListener(btnListener);
callPartners = APIHelper.getApiService().getPartners();
callPartners.enqueue(this);
return view;
}
Button.OnClickListener btnListener = (new View.OnClickListener() {
@Override
public void onClick(View v) {
APIHelper helper = new APIHelper();
apiService = helper.getApiService();
Call<Partners> call = apiService.getPartners();
call.enqueue(new Callback<Partners>() {
@Override
public void onResponse(Call<Partners> call, Response<Partners> response) {
APIHelper helper = new APIHelper();
helper.getApiService();
Call<Partners> call = apiService.getPartners();
call.enqueue(new Callback<Partners>() {
@Override
public void onResponse(Call<Partners> call, Response<Partners> response) {
List<String> partners = response.body().getPartners();
Log.d(TAG, "Number of partners received: " + partners.size());
/*if (response.body() != null) {
ArrayList<String> partnersList;
partnersList = response.body();
Log.d("DOWNLOAD", String.valueOf(partnersList));
}*/
}
@Override
public void onFailure(Call<Partners> call, Throwable t) {
Toast.makeText(getActivity(), "FAIL!!!", Toast.LENGTH_SHORT).show();
}
});
}
});
@Override
public void onResponse(Call<Partners> call, Response<Partners> response) {
}
@Override
public void onFailure(Call<Partners> call, Throwable t) {
}
}
问题:有人能指导我,告诉我哪里出了问题,并帮助我解决这个问题吗?
编辑:
Button.OnClickListener btnListener = (new View.OnClickListener() {
@Override
public void onClick(View v) {
APIHelper helper = new APIHelper();
apiService = helper.getApiService();
Call<ArrayList<String>> call = null;
call.enqueue(new Callback<ArrayList<String>>() {
@Override
public void onResponse(Call<ArrayList<String>> call, Response<ArrayList<String>> response) {
ArrayList<String> partners = response.body();
Log.d(TAG, "Number of partners received: " + partners.size());
}
@Override
public void onFailure(Call<ArrayList<String>> call, Throwable t) {
Toast.makeText(getActivity(), "FAIL!!!", Toast.LENGTH_SHORT).show();
}
});
}
});
Button.OnClickListener btnListener=(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
APIHelper=新的APIHelper();
apiService=helper.getApiService();
Call=null;
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
ArrayList partners=response.body();
Log.d(标记“接收的合作伙伴数:”+partners.size());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getActivity(),“FAIL!!!”,Toast.LENGTH\u SHORT.show();
}
});
}
});
错误日志:
错误:(68,60)错误:不是抽象的,也不是抽象的
重写抽象方法
中的onResponse(调用>,响应>)
回拨
错误:(72,53)错误:找不到符号方法体()
错误:(69,17)错误:方法不重写或实现方法
从超类型
错误:任务“:app:compiledBugJavaWithJavaC”的执行失败
编译失败;有关详细信息,请参阅编译器错误输出
根据JSON响应,POJO类应为:
public class Partners {
private ArrayList<String> partners = new ArrayList<>(0);
// Get; Set methods //
}
公共类合作伙伴{
私有ArrayList partners=新ArrayList(0);
//获取;设置方法//
}
根据您的JSON响应,您的POJO类应该是:
public class Partners {
private ArrayList<String> partners = new ArrayList<>(0);
// Get; Set methods //
}
公共类合作伙伴{
私有ArrayList partners=新ArrayList(0);
//获取;设置方法//
}
您的问题在onClick()中
您没有将服务分配到变量中
将其更改为:
apiService = helper.getApiService();
编辑:
基于新的更新,我认为你不需要使用POJO
只需在您的通话中使用以下内容
呼叫
要获得响应,只需使用response.body()
而不使用.partners()
尝试在代码中的任何地方替换它,并检查onClick()中的问题 您没有将服务分配到变量中 将其更改为:
apiService = helper.getApiService();
编辑:
基于新的更新,我认为你不需要使用POJO
只需在您的通话中使用以下内容
呼叫
要获得响应,只需使用response.body()
而不使用.partners()
尝试在代码中的任何地方替换它,并选中尝试将其放入APIHelper类中,以获取有关发送内容的更多信息
public static APIService apiService;
//this http loggin interceptor allows you debug requests and responses
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
// set your desired log level
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
// add your other interceptors …
// add logging as last interceptor
httpClient.addInterceptor(logging); // <-- this is the important line!
public static APIService getApiService() {
if (apiService == null) {
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
}
return apiService;
}
公共静态APIService-APIService;
//此http loggin拦截器允许您调试请求和响应
H