求救啊,为什么会有空指针异常.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>