当前位置: 首页 > 知识库问答 >
问题:

改型:java。lang.NullPointerException

轩辕华辉
2023-03-14

NullPointerException且未连接适配器;每次我在GennMotion上测试此应用程序时,都会跳过布局。我读过与同一问题相关的其他问题,但没有任何帮助。

logcat

09-20 13:21:13.7384658-4658/com。实例基兰。detailapp E/AndroidRuntime:致命异常:主进程:com。实例基兰。detailapp,PID:4658 java。lang.NullPointerException:尝试调用接口方法“int java”。util。列表com上的空对象引用上的size()。实例基兰。detailapp。回收器适配器。android上的getItemCount(RecyclerAdapter.java:38)。支持v7。小装置。回收视图。android上的dispatchLayoutStep1(RecyclerView.java:3493)。支持v7。小装置。回收视图。android上的onMeasure(RecyclerView.java:3019)。看法看法在android上测量(View.java:17430)。小装置。相对论。android上的measureChild(RelativeLayout.java:697)。小装置。相对论。android上的onMeasure(RelativeLayout.java:481)。看法看法在android上测量(View.java:17430)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5463)。小装置。框架布局。android上的onMeasure(FrameLayout.java:430)。支持v7。小装置。ContentFrameLayout。android上的onMeasure(ContentFrameLayout.java:139)。看法看法在android上测量(View.java:17430)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5463)。支持v7。小装置。操作Baroverlay布局。android上的onMeasure(ActionBarOverlayLayout.java:393)。看法看法在android上测量(View.java:17430)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5463)。小装置。框架布局。android上的onMeasure(FrameLayout.java:430)。看法看法在android上测量(View.java:17430)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5463)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1436)。小装置。线性布局。android上的measureVertical(LinearLayout.java:722)。小装置。线性布局。android上的onMeasure(LinearLayout.java:613)。看法看法在android上测量(View.java:17430)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5463)。小装置。框架布局。com上的onMeasure(FrameLayout.java:430)。Android内部的政策impl。电话窗口$DecorView。android上的onMeasure(PhoneWindow.java:2560)。看法看法在android上测量(View.java:17430)。看法ViewRootImpl。android上的performMeasure(ViewRootImpl.java:2001)。看法ViewRootImpl。android上的measureHierarchy(ViewRootImpl.java:1166)。看法ViewRootImpl。android上的performTraversals(ViewRootImpl.java:1372)。看法ViewRootImpl。android上的doTraversal(ViewRootImpl.java:1054)。看法ViewRootImpl$TraversalRunnable。在android上运行(ViewRootImpl.java:5779)。看法编舞$CallbackRecord。在android上运行(Choreographer.java:767)。看法编舞android上的doCallbacks(Choreographer.java:580)。看法编舞android上的doFrame(Choreographer.java:550)。看法Choreographer$FrameDisplayEventReceiver。在android上运行(Choreographer.java:753)。操作系统。处理程序。android上的handleCallback(Handler.java:739)。操作系统。处理程序。android上的dispatchMessage(Handler.java:95)。操作系统。活套。android上的loop(Looper.java:135)。应用程序。活动线程。java上的main(ActivityThread.java:5221)。朗。反思。方法在java上调用(本机方法)。朗。反思。方法在com上调用(Method.java:372)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:899)。Android内部的操作系统。合子体。main(ZygoteInit.java:694)

联系JAVA

package com.example.kiran.detailapp;
import com.google.gson.annotations.SerializedName;
public class Contact {
    @SerializedName("name")
    private String Name;

    @SerializedName("email")
    private String Email;

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }
}

ApiClient.java

    package com.example.kiran.detailapp;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class ApiClient {

    public static final String BASE_URL = "http://10.0.3.2/ContactApp/";

    public static Retrofit retrofit = null;

    public static Retrofit getApiClient()
    {
        retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create()).build();
        return retrofit;
    }
}

Api接口。JAVA

    package com.example.kiran.detailapp;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.POST;
public interface ApiInterface {


    @POST("ReadContacts.php")
    Call<List<Contact>> getContacts();
}

回收员dapter.java

    package com.example.kiran.detailapp;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.util.List;

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {

    private List<Contact> contacts;
    public RecyclerAdapter(List<Contact> contacts)
    {
        this.contacts = contacts;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item,parent,false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.Name.setText(contacts.get(position).getName());
        holder.Email.setText(contacts.get(position).getEmail());
    }

    @Override
    public int getItemCount() {
        return contacts.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView Name,Email;
        public MyViewHolder(View itemView) {
            super(itemView);
            Name = (TextView) itemView.findViewById(R.id.name);
            Email = (TextView) itemView.findViewById(R.id.email);

        }
    }
}

主要活动。JAVA

    package com.example.kiran.detailapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerAdapter adapter;
    private List<Contact> contacts;
    private ApiInterface apiInterface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        adapter = new RecyclerAdapter(contacts);
        recyclerView = (RecyclerView) findViewById(R.id.Recycleview);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);

        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();

                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<List<Contact>> call, Throwable t) {

            }
        });
    }
}

共有2个答案

虞祯
2023-03-14

我在代码中看到了一些问题。

1) 您的联系人var将在适配器内取消初始化。

2) 您已经在后台线程中运行的onResponse方法中设置了recyclerview。

解决方案:

您需要初始化联系人,然后在onResponse方法中给他们赋值,并在活动的runOnUiThread方法中设置适配器。

希望这段代码能有所帮助。

1) 初始化联系人

private List<Contact> contacts = new ArrayList<>();

2)在方法中给出期望值,并在那里初始化适配器,删除初始化形式。

call.enqueue(new Callback<List<Contact>>() {
        @Override
        public void onResponse(Call<List<Contact>> call, Response<List<Contact>> response) {
            contacts = response.body();
            adapter = new RecyclerAdapter(contacts);
            runOnUiThread(() -> {
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            });

        }

        @Override
        public void onFailure(Call<List<Contact>> call, Throwable t) {

        }
狄新立
2023-03-14

你忘了初始化数组列表

 private List<Contact> contacts;

然后在onCreate()中执行此操作

contacts= new ArrayList<>();
 类似资料:
  • 我使用两种拦截器,一种是HttpLoggingInterceptor,另一种是我的自定义授权拦截器 我正在使用下面更新的改造版本库, 下面是代码 当我试图执行下面的代码时,在名为SynsynizationManager.kt的文件中,它会给我一个错误。 我的规则资源服务类在这里 调试后,我发现当调用下面的函数时,我得到了一个异常 我有以下错误 下面是屏幕截图,你们可以看到,我得到了文件的输出,但不

  • 问题内容: 我正在为我的Android手机构建一个小型应用程序,以使用非常基本的REST界面将短信转发到网络服务器。 我正在使用android 4.0.3 SDK。我使用Django和Django restframework包在python中开发了Web服务。设置完全是开箱即用的。基本上有一个端点可以接收包含消息信息(发送者,正文,日期)的JSON对象的POST。我已经使用cURL通过以下命令测试

  • 我正在使用Reverfit2获取json并将其解析为POJO。我的目的是获取该对象的一个值。 我的REST客户端: 在这里我找到了创建服务的很棒很棒的工具:

  • 我正在为我的Android手机构建一个小应用程序,使用非常基本的REST界面将短信转发到网络服务器。 我正在使用android 4.0.3 SDK。我使用Django和Django restframework包在python中开发了webservice。设置完全是开箱即用的。基本上只有一个endpoint接收包含消息信息(发件人、正文、日期)的JSON对象的帖子。我使用cURL和以下命令测试了该服

  • 我有一个MyClass,它的属性类型为MyAttribute。该类由MySubClass继承,其属性类型为MySubAttribute。MySubAttribute是MyAttribute的子类: 现在假设我有以下代码: 如何生成MySubAttribute类型的返回值?

  • {“登录”:“testuser”,“邮件”:“testuser@gmail.com”,“密码”:“123abc”} 现在的问题是:我听说我们不应该将密码存储为字符串,而是在Java中存储为char数组,所以我就是这么做的。 下面是我的用户类 在决定接受json作为请求之前,我使用byte[]作为密码,这就是它在数据库中的样子,也是我希望它现在的样子。 bAz}+øeí'méjé7héubfpléa