我正在使用Object类(public static List<Restaurant> res;
)来设置我从服务器获取json数据的数据。该应用程序的流程如下。
第1步:(MainActivity.class)
从服务器获取数据
第2步:
将所有Json数据设置为List<Object>
类。并在MainActivity中将List<Object>
声明为公共静态
第3步:
这里我需要将List<Object>
类值填充到Recyclerview.Due中以声明为public static,我在将适配器设置为具有MainActivity作为父级的片段时直接调用它。
adapter = new CardAdapter(MainActivity.res, context);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
但问题是,在填充RecyclerView时,我只会重复最后一项,直到 List<Restaurant>
大小。
MainActivity(AsyncTask方法):
private class TabNameSync extends AsyncTask<Void, Void, String> {
String BASE_URL = Config.DATA_URL;
ProgressDialog nDialog;
HashMap<String, String> hashMapPost = new HashMap<>();
@Override
protected void onPreExecute() {
nDialog = new ProgressDialog(MainActivity.this);
nDialog.setMessage("Loading...");
nDialog.setIndeterminate(true);
nDialog.setCancelable(true);
nDialog.show();
}
@Override
protected String doInBackground(Void... params) {
HttpURLConnection con = null;
InputStream is = null;
StringBuffer buffer;
String bufferVariable = null;
hashMapPost.put("tag", "onload");
hashMapPost.put("lat", "18.71851808");
hashMapPost.put("log", "97.74131474");
try {
con = (HttpURLConnection) (new URL(BASE_URL)).openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.connect();
OutputStream os = con.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(commonUtil.getPostDataString(hashMapPost));
writer.flush();
writer.close();
os.close();
buffer = new StringBuffer();
int responseCode = con.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
is = con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null)
buffer.append(line).append("\r\n");
is.close();
}
con.disconnect();
bufferVariable = buffer.toString();
return buffer.toString();
} catch (Throwable t) {
t.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
} catch (Throwable t) {
}
try {
if (con != null) {
con.disconnect();
}
} catch (Throwable t) {
}
if (!bufferVariable.equalsIgnoreCase(" ")) {
try {
JSONArray jArray = new JSONArray(bufferVariable);
int jsonLength = jArray.length();
for (int j = 0; j < jArray.length(); j++) {
Restaurant_Beam item;
JSONObject jsonObj = jArray.getJSONObject(j);
item = new Restaurant_Beam();
item.setIG_LIKECOUNT(jsonObj.getInt(Config.LIKE));
item.setIG_DELIVERY(jsonObj.getInt(Config.DELIVERYTIME));
item.setIG_PRODUCTID(jsonObj.getString(Config.PRODUCTID));
item.setIG_SALES_PRICE(jsonObj.getString(Config.SALESPRICE));
item.setIG_VOUCHER_ID(jsonObj.getString(Config.VOUCHERID));
item.setIG_VOUCHEROFFER(jsonObj.getString(Config.VOUCHEROFFER));
item.setIG_CATEGORY_ID(jsonObj.getString(Config.CATEID));
item.setIG_IMAGEURL(jsonObj.getString(Config.IMGID));
item.setIG_PRODUCTNAME(jsonObj.getString(Config.PRODUCTNAME));
item.setIG_CATEGORYNAME(jsonObj.getString(Config.CATENAME));
Restaurant.add(item);
listSuperHeroes = Restaurant;
strTabName = jsonObj.getString("Cate Name");
String strProductID = jsonObj.getString("Pro_Id");
String strProductName = jsonObj.getString("Product_Name");
String strSalesPrice = jsonObj.getString("Sales Price");
String strVoucherId = jsonObj.getString("Voucher Id");
String strVoucherOffer = jsonObj.getString("voucher Offer");
String strCatId = jsonObj.getString("Cat Id");
String strImage = jsonObj.getString("Image");
String strLikes = jsonObj.getString("likes");
String strDeliveryTime = jsonObj.getString("deliverytime");
strDbName = jsonObj.getString("dbname");
tabName.add(strTabName);
DbName.add(strDbName);
if (jsonLength == jArray.length()) {
JSONObject jsonObj2 = jArray.getJSONObject(jsonLength - 1);
Config.IMAGE_URL = jsonObj2.getString("url");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
values = new ArrayList<String>();
values = tabName;
HashSet<String> hashSet = new HashSet<String>();
hashSet.addAll(values);
values.clear();
values.addAll(hashSet);
nDialog.dismiss();
// setTime_ToSlide();
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
SharedPreferences.Editor editor = pref.edit();
editor.putString("FIRST_TAB", values.get(1));
editor.putString("SECOND_TAB", values.get(0));
editor.putString("THIRD_TAB", values.get(2));
editor.commit();
}
}
此处仅重复RED更改的数据,其他数据与正确的数据相关。
我也发布了我的代码。请检查一下。
答案 0 :(得分:1)
使用CardAdapter构造函数发送列表对象
new CardAdapter(MainActivity.res, context, List<object> abc);
然后使用它。
答案 1 :(得分:1)
您的代码存在“引用”问题。在循环内移动Restaurant item= new Restaurant();
。像这样:
public static List<Restaurant> res;
try {
JSONArray jArray = new JSONArray(bufferVariable);
int jsonLength = jArray.length();
for (int j = 0; j < jArray.length(); j++) {
JSONObject jsonObj = jArray.getJSONObject(j);
strTabName = jsonObj.getString("Cate Name");
Restaurant item= new Restaurant();
item.setIG_LIKECOUNT(jsonObj.getInt(Config.LIKE));
item.setIG_DELIVERY(jsonObj.getInt(Config.DELIVERYTIME));
item.setIG_PRODUCTID(jsonObj.getString(Config.PRODUCTID));
item.setIG_PRODUCTNAME(jsonObj.getString(Config.PRODUCTNAME));
item.setIG_SALES_PRICE(jsonObj.getString(Config.SALESPRICE));
item.setIG_VOUCHER_ID(jsonObj.getString(Config.VOUCHERID));
item.setIG_VOUCHEROFFER(jsonObj.getString(Config.VOUCHEROFFER));
item.setIG_CATEGORY_ID(jsonObj.getString(Config.CATEID));
item.setIG_CATEGORYNAME(jsonObj.getString(Config.CATENAME));
item.setIG_IMAGEURL(jsonObj.getString(Config.IMGID));
res.add(item);
if (jsonLength == jArray.length()) {
JSONObject jsonObj2 = jArray.getJSONObject(jsonLength - 1);
Config.IMAGE_URL = jsonObj2.getString("url");
}
}
答案 2 :(得分:1)
我自己修复了错误。我更改的是我已将每个变量(产品名称,CategoryName )设置为List<Object>
类中的公共静态字符串。
删除静态后,我得到了确切的结果。我的 RecyclerView 被改编为完美。如下所示
而不是
public static String ProductName;
使用此
public String ProductName;