求救啊,为什么会有空指针异常.RecyclerView$LayoutManager.onMeasure

peiwx 2017-01-19 10:36:31
RecyclerView出现下面的问题,哪个大神能帮我一下。




01-19 10:07:04.777 32564-32564/com.onlyu.peiwenxin.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.onlyu.peiwenxin.test, PID: 32564
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764)
at android.view.View.measure(View.java:17555)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5536)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17555)。。。。。。。。。(太长就不写了)



Activity文件:
public class MainActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private SwipeRefreshLayout swipeRefreshLayout;
private MyAdapter myAdapter;
private List<Customer> mdata;
private HttpHelper httpHelper;
private LinearLayoutManager linearLayoutManager;
private String url = "http://172.21.128.1:8081/customer/getCustomer";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

getu();

}

private void initView() {
recyclerView = (RecyclerView) findViewById(R.id.recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
myAdapter = new MyAdapter(mdata, this);

recyclerView.setAdapter(myAdapter);

}

public void getu() {

URLHelp urlHelp = URLHelp.getURLHelp();
urlHelp.doGet(url);
urlHelp.setDataCallback(new URLHelp.DataCallback() {
@Override
public void callBackByTel(List<Customer> data) {
mdata = data;
initView();
}
});

}
}

URLHelp:

public class URLHelp {
private static URLHelp urlHelp;
private static Handler handler;
private DataCallback dataCallback;

private URLHelp(){
handler = new Handler(Looper.getMainLooper());
}
public synchronized static URLHelp getURLHelp(){
if (urlHelp ==null){
return urlHelp = new URLHelp();
}
return urlHelp;
}

public void setDataCallback(DataCallback dataCallback) {
this.dataCallback = dataCallback;
}
public void doGet(final String str_url){

new Thread(new Runnable() {
@Override
public void run() {
InputStreamReader isr = null;
BufferedReader br=null;
URL url = null;
try {
url= new URL(str_url);
isr=new InputStreamReader(url.openStream());
br = new BufferedReader(isr);
StringBuffer json = new StringBuffer();
String str = null;
while ((str=br.readLine())!=null){
json.append(str);
}
Log.e("success",json.toString());
List<Customer> mdata = null;
try {
mdata = GsonUtils.fromJsonArray(json.toString(), Customer.class);
} catch (Exception e) {
e.printStackTrace();
}
qucallBackByTel(mdata);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (isr!=null){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}).start();

}
public interface DataCallback {
public void callBackByTel(List<Customer> mdata);

}

private void qucallBackByTel(final List<Customer> mdata) {
handler.post(new Runnable() {

@Override
public void run() {
dataCallback.callBackByTel(mdata);
}
});
}

}
MyAdapter:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<Customer> data;
private Context context;

public MyAdapter(List<Customer> data, Context context) {
this.data = data;
this.context = context;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(context)
.inflate(R.layout.layout_item, parent, false));
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.id.setText(data.get(position).getId()+" s ");
holder.title.setText(data.get(position).getName());
holder.content.setText(data.get(position).getPassword());


}

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

class MyViewHolder extends RecyclerView.ViewHolder {

private TextView id;
private TextView title;
private TextView content;

public MyViewHolder(View itemView) {
super(itemView);
id = (TextView) itemView.findViewById(R.id.id);
title = (TextView) itemView.findViewById(R.id.title);
content = (TextView) itemView.findViewById(R.id.content);
}
}
}


layout文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:id="@+id/activity_s"
android:layout_width="match_parent"
android:layout_height="match_parent"

tools:context="com.onlyu.peiwenxin.test.Second.SActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent">

</android.support.v7.widget.RecyclerView>

</LinearLayout>




...全文
581 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
peiwx 2017-01-19
  • 打赏
  • 举报
回复
我发现是我依赖弄错了,版本低了,可是让我找了老半天。非常感谢你的回答。
引用 1 楼 u014448521 的回复:
recyclerView = (RecyclerView) findViewById(R.id.recycler); recyclerView.setLayoutManager(new LinearLayoutManager(this)); 这段放在getu();上面应该就没问题了
zyl9241 2017-01-19
  • 打赏
  • 举报
回复
recyclerView = (RecyclerView) findViewById(R.id.recycler); recyclerView.setLayoutManager(new LinearLayoutManager(this)); 这段放在getu();上面应该就没问题了

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧