我在適配器類中出現nullPointException。如何在列表視圖中使用Retrofit獲取數據
我想從包含名稱和電子郵件的服務器獲得聯繫。 我聯繫類是
public class Contact {
@SerializedName("name")
private String Name;
@SerializedName("email")
private String Email;
public String getName() {
return Name;
}
public String getEmail() {
return Email;
}
}
ApiClient類
public class ApiClient {
private static final String BASE_URL = "http://192.168.43.88/ContactApp/";
public static Retrofit retrofit = null;
public static Retrofit getApiClient(){
if (retrofit == null){
retrofit = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
}
return retrofit;
}
}
這就是我得到空指針異常在infalter適配器類
公共類RetrofitItemAdapter延伸BaseAdapter {
Context mContext;
private List<Contact> mContact;
RecyclerView.ViewHolder vh = null;
//Constructor
public RetrofitItemAdapter(List<Contact> mContact) {
this.mContact = mContact;
}
public class ViewHolder {
public TextView tvName;
public TextView tvEmail;
}
@Override
public int getCount() {
return mContact.size();
}
@Override
public Object getItem(int position) {
return mContact.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
View vi = convertView;
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater;
inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.listview_retrofit_items, null);
holder = new ViewHolder();
holder.tvName = (TextView) vi.findViewById(R.id.tv_ret_name);
holder.tvEmail = (TextView) vi.findViewById(R.id.tv_ret_email);
vi.setTag(holder);
} else
holder = (ViewHolder) vi.getTag();
// now set your text view here like
// holder.tvName.setText("Bla Bla Bla");
holder.tvName.setText(mContact.get(position).getName());
holder.tvEmail.setText(mContact.get(position).getEmail());
// return your view
return vi;
,最後我的主類是
public class RetrofitDemo extends AppCompatActivity {
private ListView listView;
private List<Contact> contacts;
private RetrofitItemAdapter adapter;
private ApiInterface apiInterface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retrofit_demo);
listView = (ListView)findViewById(R.id.lv_retrofitData);
apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<List<Contact>> call = apiInterface.getContacts();
call.enqueue(new Callback<List<Contact>>() {
@Override
public void onResponse(Call<List<Contact>> call, Response<List<Contact>> response) {
contacts = response.body();
adapter = new RetrofitItemAdapter(contacts);
listView.setAdapter(adapter);
}
@Override
public void onFailure(Call<List<Contact>> call, Throwable t) {
}
});
}
}
logcat的錯誤
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.admin.myapplication, PID: 2528
java.lang.NullPointerException
at com.example.admin.myapplication.RetrofitItemAdapter.getView(RetrofitItemAdapter.java:66)
at android.widget.AbsListView.obtainView(AbsListView.java)
at android.widget.ListView.makeAndAddView(ListView.java:1790)
at android.widget.ListView.fillDown(ListView.java:691)
at android.widget.ListView.fillFromTop(ListView.java:752)
at android.widget.ListView.layoutChildren(ListView.java:1630)
at android.widget.AbsListView.onLayout(AbsListView.java)
at android.view.View.layout(View.java:14834)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
at android.view.View.layout(View.java:14834)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14834)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
at android.view.View.layout(View.java:14834)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14834)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14834)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14834)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1988)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1745)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1001)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5623)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5241)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:818)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
哪裏是我的錯,請幫幫我 謝謝
請分享你的錯誤的logcat的輸出 – stamanuel
致命例外:main 進程:com.example.admin.myapplication,PID:2528 java.lang.NullPointerException at com.example.admin.myapplication.Retrof itItemAdapter.getView(RetrofitItemAdapter.java:66) at android.widget.AbsListView.obtainView(AbsListView.java) –
好吧,你會發現崩潰出現在你的RetrofitItemAdapter.java的第66行。現在如果你願意共享更多的logcat輸出也許我們可以看到爲什麼有一個空指針。因爲我猜66行在文件中的位置與您發佈的行不同,因爲您沒有包含導入。 – stamanuel