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) {
}
});
}
}
我在代码中看到了一些问题。
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) {
}
你忘了初始化数组列表
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