我的RecyclerView的下拉刷新在进行添加数据的时候发生错误 求大神指个出路 求求了
我都写好了注释 希望大家能尽力看懂 能帮我解决问题我非常感谢!!!
Adapter没有问题
下面是Activity
package com.RecyclerViewlayout.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.view.View;
import android.widget.Button;
import com.RecyclerViewlayout.adapter.ListViewAdapter;
import com.connect.bean.querybeanforAndroid;
import com.connect.dao.DeleteActivity;
import com.connect.dao.NewInsertActivity;
import com.connect.dao.UpdateActivity;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.test.hellowrold.R;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class ListViewActivity extends AppCompatActivity {
RecyclerView recyclerView =null ;//RecyclerView 的全局变量
List<querybeanforAndroid> beans = new ArrayList<querybeanforAndroid>();//将json字符串解析到List里面的全局变量list
String querysqldata_forjson = null;//得到json字符串的全局变量
Button buttondelete ; //删除按钮
Button buttonupdate ; //修改按钮
Button buttonInsert ; //新增按钮
//RecyclerView adapter; //适配器的全局变量
ListViewAdapter adapter;
SwipeRefreshLayout swipeRefreshLayout;// 下拉刷新的SwipeRefreshLayout的全局变量
@Override
protected void onCreate(Bundle savedInstanceState) {
getjsonDate();//得到json字符串 并且赋值给 querysqldata_forjson
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);//加载默认布局文件
recyclerView = this.findViewById(R.id.resyc_list);//给RecyclerView 控键键值(赋值声明)
swipeRefreshLayout = this.findViewById(R.id.listView_refresh);//设置下拉刷新
//下面 七行 是将json字符串解析到list里面
Gson gson = new Gson();//创建Gson对象
JsonParser jsonParser = new JsonParser();
JsonArray jsonElements = jsonParser.parse(querysqldata_forjson).getAsJsonArray();//获取JsonArray对象
for (JsonElement bean : jsonElements) {
querybeanforAndroid bean1 = gson.fromJson(bean, querybeanforAndroid.class);//解析
beans.add(bean1);
}
//设置查询界面的三个按钮 增删改的单击事件
buttonInsert=findViewById(R.id.button_recyclerview_insert);
buttonInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ListViewActivity.this, NewInsertActivity.class);
startActivity(intent);
}
});
buttonupdate=findViewById(R.id.recyclerview_update_button);
buttondelete=findViewById(R.id.recyclerview_delete_button);
buttondelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ListViewActivity.this, DeleteActivity.class);
startActivity(intent);
}
});
buttonupdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ListViewActivity.this, UpdateActivity.class);
startActivity(intent);
}
});
handlerDownPullrefresh();//下拉刷新的方法
//加载LinearLayoutManager布局器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(ListViewActivity.this);
//添加配置器
recyclerView.setLayoutManager(linearLayoutManager);
//创建适配器
adapter = new ListViewAdapter(beans);
//将适配器 添加设置 到RecyclerView里头
recyclerView.setAdapter(adapter);
}
//下拉刷新方法
private void handlerDownPullrefresh() {
swipeRefreshLayout.setEnabled(true);//将下拉刷新设置开启 设置为true
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Thread(new Runnable() {//下拉刷新也需要在新线程里面得到值
@Override
public void run() {
getjsonDate();
Gson gson = new Gson();//创建Gson对象
JsonParser jsonParser = new JsonParser();
JsonArray jsonElements = jsonParser.parse(querysqldata_forjson).getAsJsonArray();//获取JsonArray对象
for (JsonElement bean : jsonElements) {
querybeanforAndroid bean1 = gson.fromJson(bean, querybeanforAndroid.class);//解析
beans.add(bean1);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//做两件事情
adapter.notifyDataSetChanged();//通知适配器更新UI数据
swipeRefreshLayout.setRefreshing(false);
}
},2000);//刷新2秒 毫秒为单位
}
}).start();
}
});
}
//与java后台连接并且得到后台传来的字符串并且给querysqldata_forjson字符串赋值 querysqldata_forjson字符串是一个公共变量
//并且连接java后台的servlet需要在新的线程里面连接 不然就会报异常
public void getjsonDate() {
new Thread(new Runnable() {
@Override
public void run() {
String URLHttp = "http://192.168.43.150:8080/web2/queryservlet";//java后台servlet的字符串路径
try {
URL url = new URL(URLHttp);//将字符串路径解析到URL里面去
HttpURLConnection connection = (HttpURLConnection) url.openConnection();//打开与后台的连接
connection.setRequestMethod("POST");//设置连接后台的方式
connection.setDoInput(true); //允许输入流
connection.setDoOutput(true); //允许输出流
connection.setUseCaches(false); //不允许使用缓存
connection.setRequestProperty("ser-Agent", "Fiddler");
connection.setRequestProperty("Content-Type", "application/json");
InputStream inputStream = connection.getInputStream();//从后台得到json对象结果
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));//解析json格式的字符串
querysqldata_forjson = reader.readLine();//解析后赋值给querysqldata_frojson字符串
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
下面是Adapte
package com.RecyclerViewlayout.adapter;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.RecyclerViewlayout.View.ListViewActivity;
import com.connect.bean.querybeanforAndroid;
import com.connect.dao.DeleteActivity;
import com.test.hellowrold.R;
import java.util.List;
public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.InnerHolder> {
private List<querybeanforAndroid> data;
public ListViewAdapter(List<querybeanforAndroid> data){
this.data = data;
}
//这个方法用于创建条目的view ↓
public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//传进去的这个view其实就是条目的界面
View view = View.inflate(parent.getContext(), R.layout.list_item_view,null);
return new InnerHolder(view);
}
//这个方法是用来绑定holder的,一般用来设置数据
@Override
public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
//在这里设置数据
holder.setData(holder,data.get(position));
}
@Override
public int getItemCount() {//返回条目个数
if(data!=null){
return data.size();
}
else
return 0;
}
public class InnerHolder extends RecyclerView.ViewHolder{
TextView idtext;
TextView nametext;
TextView pricetext;
Button deleteButton;
Button updateButton;
public InnerHolder(@NonNull View itemView) {
super(itemView);
//找到条目的控键
idtext = itemView.findViewById(R.id.text_id_recyclerview);
nametext = itemView.findViewById(R.id.text_name_recyclerview);
pricetext = itemView.findViewById(R.id.text_price_recyclerview);
deleteButton = itemView.findViewById(R.id.recyclerview_delete_button);
updateButton = itemView.findViewById(R.id.recyclerview_update_button);
}
//这个方法用于设置数据
public void setData(InnerHolder holder, querybeanforAndroid querybean) {
holder.idtext.setText(String.valueOf(querybean.getId()));
holder.nametext.setText(querybean.getName());
holder.pricetext.setText(String.valueOf(querybean.getPrice()));
/* holder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onItemClick();
}
});*/
//以后完善了在修改按钮的单击删除和修改
}
}
}
下面是Layout布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/recyclerview_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询界面"
android:textSize="30sp"
android:gravity="center_horizontal">
</TextView>
<Button
android:id="@+id/button_recyclerview_insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/recyclerview_title"
android:text="新增数据"
android:textSize="20sp"
android:layout_marginLeft="20dp"
>
</Button>
<Button
android:id="@+id/recyclerview_delete_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/button_recyclerview_insert"
android:layout_below="@id/recyclerview_title"
android:text="删除数据"
android:textSize="20sp"
android:layout_marginLeft="20dp"
>
</Button>
<Button
android:id="@+id/recyclerview_update_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改数据"
android:layout_toRightOf="@id/recyclerview_delete_button"
android:layout_below="@id/recyclerview_title"
android:textSize="20sp"
android:layout_marginLeft="20dp"
>
</Button>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_below="@id/button_recyclerview_insert"
android:id="@+id/listView_refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/resyc_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>
下面运行效果
不加Looper.prepare();
就会报错
报错结果
只给代码,不给个错误报错的数据看看吗,看到代码,就不想定位了。我只是想看看,发生了什么错误。😆
应该是数据获取线程没返回结果时,就在添加数据
啥错误呀?