在我的应用中,有一个添加按钮,点击后会添加一个新的tableviewcell。然而问题是我第一次得到重复的细胞。基本上,当我第二次点击时,我得到2个重复,第三次点击3,依此类推....请查看截图的图像:
上图是第一个屏幕。单击“+”将添加一个新单元格,如下图所示:
现在,如果我退出此视图并返回,再次单击添加并创建一个新单元格,它会给我重复,如上段所述(即第二次为2,第三次为3,依此类推...)。 以下是屏幕截图:
以下是我正在使用的代码:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableInputFormat;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaSparkContext;
import java.io.IOException;
public class HbaseScan {
public static void main(String ... args) throws IOException, InterruptedException {
// Spark conf
SparkConf sparkConf = new SparkConf().setMaster("local[4]").setAppName("My App");
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
// Hbase conf
Configuration conf = HBaseConfiguration.create();
conf.set(TableInputFormat.INPUT_TABLE, "big_table_name");
// Create scan
Scan scan = new Scan();
scan.setCaching(500);
scan.setCacheBlocks(false);
scan.setStartRow(Bytes.toBytes("a"));
scan.setStopRow(Bytes.toBytes("d"));
// Submit scan into hbase conf
conf.set(TableInputFormat.SCAN, TableMapReduceUtil.convertScanToString(scan));
// Get RDD
JavaPairRDD<ImmutableBytesWritable, Result> source = jsc
.newAPIHadoopRDD(conf, TableInputFormat.class,
ImmutableBytesWritable.class, Result.class);
// Process RDD
System.out.println(source.count());
}
}
有人可以帮我理解我的代码有什么问题吗?谢谢!
编辑:我已经毫不费力地推荐了这个帖子:Getting duplicate cells with UITableViewController cellForRowAtIndexPath
编辑2:此外,当我走出该视图并转到相同的视图时,重复的值被转化。
编辑3:尝试答案但没有成功。
答案 0 :(得分:0)
按照以下步骤操作:
当您从firebase db获取数据时,首先删除您在cellForRow
方法中使用的所有对象。在你的情况下,我认为它应该是Bucket数组(不确定)。
将数据分配给对象
重新加载tableview。
数据复制的原因。
让你的存储桶有2个值,它存储在数据库中。从DB获取数据时,它会为您提供所有值,即1,2,3。现在你添加这些,你的数组将是1,2,1,2,3。
这就是你案件中发生的事情。