Android 动态扫描二维码后如何向recyclerView添加项目
1.在浮动按钮上单击QR代码,扫描结果为Android 动态扫描二维码后如何向recyclerView添加项目,android,Android,1.在浮动按钮上单击QR代码,扫描结果为**acc123**,它将调用web服务中的JSON数据,该web服务为查看\u ID='v1',运行正常 2.我要做的是在下一次扫描的结果是**acc124**,它将调用来自web服务的JSON数据,它是查看_ID=“v2”。我希望它存储在相同的回收器视图中,并将其绑定到脱机 但是,在这一点上,当我扫描新的二维码时,所有以前的数据都消失了,它调用JSON数据并存储它的视图 MainActivity.java public class MainActivi
**acc123**
,它将调用web服务中的JSON数据,该web服务为查看\u ID='v1'
,运行正常
2.我要做的是在下一次扫描的结果是**acc124**
,它将调用来自web服务的JSON数据,它是查看_ID=“v2”
。我希望它存储在相同的回收器视图中,并将其绑定到脱机
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private Menu menu;
TextView qrCode;
private static final String TAG = "QR CODE";
List<GetAdapter> GetAdapter1;
RecyclerView.LayoutManager recyclerViewlayoutManager;
RecyclerView.Adapter recyclerViewadapter;
JsonArrayRequest jsonArrayRequest;
RequestQueue requestQueue;
//qr code scanner object
private IntentIntegrator qrScan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//intializing scan object
qrScan = new IntentIntegrator(this);
GetAdapter1 = new ArrayList<>();
recyclerView = (RecyclerView) findViewById(R.id.recyclerview3);
qrCode = (TextView) findViewById(R.id.textView_Category);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(mLayoutManager);
}
/**
* Initializing collapsing toolbar
* Will show and hide the toolbar title on scroll
*/
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
qrScan.initiateScan();
Snackbar.make(view, "Replace with QR code scan action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
//Getting the scan results
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
//if qrcode has nothing in it
if (result.getContents() == null) {
Toast.makeText(this, "Result Not Found", Toast.LENGTH_LONG).show();
} else {
qrCode.setText(result.getContents());
JSON_DATA_WEB_CALL();
//if qr contains data
Toast.makeText(this, result.getContents(), Toast.LENGTH_LONG).show();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
/** JSON CALL */
public void JSON_DATA_WEB_CALL() {
final ProgressDialog mProgressDialog = new ProgressDialog(this);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setMessage("Loading...");
mProgressDialog.show();
Log.d(TAG, "JSON_DATA_WEB_CALL: " + Constants.GET_JSON_DATA_HTTP_URL + qrCode.getText().toString());
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
Constants.GET_JSON_DATA_HTTP_URL + qrCode.getText().toString(), null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
GetAdapter GetAdapter2 = new GetAdapter();
Log.d("Request", response.toString());
try {
response.getString("View_ID");
JSONArray array = response.getJSONArray("View");
GetAdapter2.setViewId(response.getString("View_ID"));
GetAdapter2.setMAC_QR_Code(qrCode.getText().toString());
JSONObject id = (JSONObject) array.get(0);
JSON_PARSE_DATA_AFTER_WEBCALL(array);
Toast.makeText(MainActivity.this, response.getString("View_ID"), Toast.LENGTH_LONG).show();
Toast.makeText(MainActivity.this, response.getString("View"), Toast.LENGTH_LONG).show();
} catch (JSONException e) {
e.printStackTrace();
}
mProgressDialog.hide();
GetAdapter1.add(GetAdapter2);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Request", "Error: " + error.getMessage());
mProgressDialog.hide();
}
});
requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonObjReq);
recyclerViewadapter = new RecyclerViewAdapter(GetAdapter1, this);
recyclerView.setAdapter(recyclerViewadapter);
}
public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){
for(int i = 0; i<array.length(); i++) {
GetAdapterButton GetAdapter2 = new GetAdapterButton();
JSONObject json = null;
try {
json = array.getJSONObject(i);
// GetAdapter2.setViewId(json.getString(JSON_VIEW_ID));
// GetAdapter2.setButtonId(json.getString(Constants.JSON_BUTTON_ID));
} catch (JSONException e) {
e.printStackTrace();
}
// GetAdapter1.add(GetAdapter2);
}
recyclerViewadapter = new RecyclerViewAdapter(GetAdapter1, this);
recyclerView.setAdapter(recyclerViewadapter);
}
}
public类MainActivity扩展了AppCompatActivity{
私人回收站;
私人菜单;
文本视图qrCode;
专用静态最终字符串标签=“二维码”;
列表GetAdapter1;
RecyclerView.LayoutManager recyclerViewlayoutManager;
适配器RecycleWebAdapter;
JsonArrayRequest JsonArrayRequest;
请求队列请求队列;
//二维码扫描对象
私人监管者qrScan;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
//初始化扫描对象
qrScan=新的监督整合器(本);
GetAdapter1=新的ArrayList();
recyclerView=(recyclerView)findViewById(R.id.RecyclerViewW3);
qrCode=(TextView)findViewById(R.id.TextView\u类别);
RecyclerView.LayoutManager mLayoutManager=新的GridLayoutManager(这个,2);
recyclerView.setLayoutManager(mLayoutManager);
}
/**
*初始化折叠工具栏
*将在滚动条上显示和隐藏工具栏标题
*/
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
qrScan.initiateScan();
Snackbar.make(查看“替换为二维码扫描动作”,Snackbar.LENGTH\u LONG)
.setAction(“Action”,null).show();
}
});
}
//获取扫描结果
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
IntentResult=IntentIntegrator.parseActivityResult(请求代码、结果代码、数据);
如果(结果!=null){
//如果qrcode中没有任何内容
if(result.getContents()==null){
Toast.makeText(这是“未找到结果”,Toast.LENGTH_LONG.show();
}否则{
qrCode.setText(result.getContents());
JSON_DATA_WEB_CALL();
//如果qr包含数据
Toast.makeText(this,result.getContents(),Toast.LENGTH_LONG.show();
}
}否则{
super.onActivityResult(请求代码、结果代码、数据);
}
}
/**JSON调用*/
public void JSON_DATA_WEB_CALL(){
final ProgressDialog mProgressDialog=新建ProgressDialog(此);
mProgressDialog.setUndeterminate(true);
设置消息(“加载…”);
mProgressDialog.show();
Log.d(标记“JSON_DATA_WEB_CALL:”+Constants.GET_JSON_DATA_HTTP_URL+qrCode.getText().toString());
JsonObjectRequest JSONObjectReq=新的JsonObjectRequest(Request.Method.GET,
Constants.GET\u JSON\u DATA\u HTTP\u URL+qrCode.getText().toString(),null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
GetAdapter GetAdapter2=新的GetAdapter();
Log.d(“请求”,response.toString());
试一试{
getString(“View_ID”);
JSONArray数组=response.getJSONArray(“视图”);
GetAdapter2.setViewId(response.getString(“视图ID”);
GetAdapter2.setMAC_QR_代码(qrCode.getText().toString());
JSONObject id=(JSONObject)数组.get(0);
JSON在WEBCALL之后解析数据(数组);
Toast.makeText(MainActivity.this,response.getString(“视图ID”),Toast.LENGTH\u LONG.show();
Toast.makeText(MainActivity.this,response.getString(“视图”),Toast.LENGTH_LONG.show();
}捕获(JSONException e){
e、 printStackTrace();
}
mProgressDialog.hide();
GetAdapter1.add(GetAdapter2);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(“请求”,“错误:+Error.getMessage());
mProgressDialog.hide();
}
});
requestQueue=Volley.newRequestQueue(this);
add(jsonObjReq);
RecycleServiceAdapter=新的RecycleServiceAdapter(GetAdapter1,this);
设置适配器(RecycleWebAdapter);
}
public void JSON\u解析\u数据\u WEBCALL之后(JSONArray数组){
对于(int i=0;i您应该只在onCreate中设置适配器一次
adapterData = new ArrayList<>();
recyclerViewadapter = new RecyclerViewAdapter(adapterData, this);
recyclerView.setAdapter(recyclerViewadapter);
adapterData=newarraylist();
RecycleServiceAdapter=新的RecycleServiceAdapter(adapterData,this);
设置适配器(RecycleWebAdapter);
无论何时添加到Arraylist,都必须调用RecycleServiceAdapter.notifyDataSetChanged()
以显示任何内容如果要重新加载,只需将条形码结果添加到Arraylist并调用适配器即可
adapterData = new ArrayList<>();
recyclerViewadapter = new RecyclerViewAdapter(adapterData, this);
recyclerView.setAdapter(recyclerViewadapter);