Ich erhalte Daten mit Schleife mit einer Schnittstelle, die mir JSONObject und "i" aus der Schleife gibt. Jedes Mal, wenn ich erhalte eine andere:Keep Daten in HashMap
{
"Id_temp": "1",
"temperatura": "20",
"Insertado_temp": "2016-08-16 12:30:29"
}
Und ich brauche alle JsonObjects in einer halten HashMap- Aber jedes Mal, wenn ich es versuchen, die Daten von der Schnittstelle überschreibt und dann nur ein Objekt „die letzten“ ist in Karte und andere werden gelöscht.
Ich würde ein Beispiel für die Implementierung in meinem Code schätzen. Hier schreibe ich den Code. Als Key-Wert von HashMap muss ich den Parameter "ID_temp", die in "Id"
public class GraficaBarometro extends AppCompatActivity implements OnLoopjCompletedBarometro {
private DrawerLayout drawerLayout;
private OnLoopjCompletedBarometro loopjListener;
// Progress Dialog Object
ProgressDialog prgDialog;
// Error Msg TextView Object
TextView errorMsg;
// Email Edit View Object
private String temeperatura;
private Timestamp timestamp;
List<Entry> presiones = new ArrayList<>();
List<Entry> temperaturas = new ArrayList<>();
List<String> dates = new ArrayList<>();
LineChart mChart;
LoopjTasksBarometro loopjTasks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_grafica_barometro);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
String idObjeto = (String) getIntent().getExtras().getSerializable("IdentidadEnviada");
loopjTasks = new LoopjTasksBarometro(this, this);
loopjTasks.CaptarParametros(idObjeto);
mChart = (LineChart) findViewById(R.id.chartbarometro);
int currentTime = (int) System.currentTimeMillis();
timestamp = new Timestamp(currentTime);
// no description text
mChart.setDescription("");
mChart.setNoDataTextDescription("You need to provide data for the chart.");
// enable touch gestures
mChart.setTouchEnabled(true);
mChart.setDragDecelerationFrictionCoef(0.9f);
// enable scaling and dragging
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
mChart.setDrawGridBackground(true);
mChart.setHighlightPerDragEnabled(true);
// limit the number of visible entries
mChart.setVisibleXRangeMaximum(5);
// if disabled, scaling can be done on x- and y-axis separately
mChart.setPinchZoom(true);
// set an alternative background color
mChart.setBackgroundColor(Color.LTGRAY);
mChart.animateX(2500);
// to draw X-axis for our graph
XAxis xAxis = mChart.getXAxis();
xAxis.setTextSize(11f);
xAxis.setEnabled(true);
xAxis.setPosition(com.github.mikephil.charting.components.XAxis.XAxisPosition.BOTTOM);
//xAxis.setAxisMaxValue(125f);
xAxis.setAxisMinValue(0f);
xAxis.setTextColor(Color.DKGRAY);
xAxis.setDrawGridLines(false);
xAxis.setDrawAxisLine(true);
// to draw axis line
//modify leftYaxis range similarly others
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setTextColor(ColorTemplate.getHoloBlue());
leftAxis.setAxisMaxValue(50f);
leftAxis.setAxisMinValue(10f);
leftAxis.setDrawGridLines(false);
leftAxis.setGranularityEnabled(true);
YAxis rightAxis = mChart.getAxisRight();
rightAxis.setTextColor(Color.RED);
rightAxis.setAxisMaxValue(50f);
rightAxis.setAxisMinValue(10f);
rightAxis.setDrawGridLines(false);
rightAxis.setDrawZeroLine(false);
rightAxis.setGranularityEnabled(false);
}
private void agregarToolbar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
if (ab != null) {
// Poner ÃÂÂcono del drawer toggle
ab.setHomeAsUpIndicator(R.drawable.drawer_toggle);
ab.setDisplayHomeAsUpEnabled(true);
}
}
private void prepararDrawer(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
seleccionarItem(menuItem);
drawerLayout.closeDrawers();
return true;
}
});
}
private void seleccionarItem(MenuItem itemDrawer) {
Fragment fragmentoGenerico = null;
FragmentManager fragmentManager = getSupportFragmentManager();
switch (itemDrawer.getItemId()) {
/*
case R.id.item_inicio:
fragmentoGenerico = new FragmentoInicio();
break;
*/
case R.id.item_web:
startActivity(new Intent(this, WebOficial.class));
break;
//fragmentoGenerico = new BlankFragment();
case R.id.item_categorias:
startActivity(new Intent(this, ActividadListaObjeto.class));
break;
case R.id.item_acceso:
startActivity(new Intent(this, MainActivity.class));
break;
}
if (fragmentoGenerico != null) {
fragmentManager
.beginTransaction()
.replace(R.id.contenido_principal, fragmentoGenerico)
.commit();
/*
if(fragmentTransaction) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
*/
}
// Setear titulo actual
setTitle(itemDrawer.getTitle());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_actividad_principal, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
/*
public String parseHours(long millis){
String currentDate = new SimpleDateFormat("hh:mm").format(new Date(millis));
Log.i(UtilitiesGlobal.TAG, "parseHours: " + currentDate);
return currentDate;
}
*/
private void setData() {
linLineDataSet set1, set2 empfangen wird;
// create a dataset and give it a type
//modifications with colour and stuf
set1 = new LineDataSet(temperaturas, "temperatura");
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
set1.setColor(ColorTemplate.getHoloBlue());
set1.setCircleColor(Color.WHITE);
set1.setLineWidth(2f);
set1.setCircleRadius(2f);
set1.setFillAlpha(65);
set1.setFillColor(ColorTemplate.getHoloBlue());
set1.setHighLightColor(Color.rgb(244, 117, 117));
set1.setDrawCircleHole(false);
//set1.setFillFormatter(new MyFillFormatter(0f));
//set1.setDrawHorizontalHighlightIndicator(false);
//set1.setVisible(false);
//set1.setCircleHoleColor(Color.WHITE);
// create a dataset and give it a type
// similar above
set2 = new LineDataSet(presiones, "presion");
set2.setAxisDependency(YAxis.AxisDependency.RIGHT);
set2.setColor(Color.RED);
set2.setCircleColor(Color.WHITE);
set2.setLineWidth(2f);
set2.setCircleRadius(2f);
set2.setFillAlpha(65);
set2.setFillColor(Color.RED);
set2.setDrawCircleHole(false);
set2.setHighLightColor(Color.rgb(244, 117, 117));
//set2.setFillFormatter(new MyFillFormatter(900f));
mChart.getXAxis().setValueFormatter(new AxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return dates.get((int) value);
}
@Override
public int getDecimalDigits() {
return 0;
}
});
ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
dataSets.add(set1); // add the datasets
dataSets.add(set2);
// create a data object with the datasets
LineData data = new LineData(dataSets);
data.setValueTextColor(Color.BLACK);
data.setValueTextSize(9f);
// set data
Log.i("Lists Sizedata", temperaturas.size() + " and " + presiones.size());
mChart.setData(data);
// move to the latest entry
mChart.moveViewToX(data.getEntryCount());
}
@Override
public void onLoopjTaskCompletedBarometro(JSONObject parametrosdht11, int i) {
String temperatura = null;
String presion = null;
String fecha = null;
String Id = null;
String altitud = null;
try {
Id = parametrosdht11.getString("Id_temp");
temperatura = parametrosdht11.getString("temperatura");
fecha = parametrosdht11.getString("Insertado_temp");
presion = parametrosdht11.getString("presion");
altitud = parametrosdht11.getString("altitud");
} catch (JSONException e) {
e.printStackTrace();
}
temperaturas.add(new Entry(Float.valueOf(i), Float.valueOf(temperatura)));
presiones.add(new Entry(Float.valueOf(i), Float.valueOf(presion)));
dates.add(fecha); // reduce the string to just 12:13 etc
//rrefresh we don't need to refresh since we are setting data after completing task
mChart.notifyDataSetChanged();
// mChart.setVisibleXRangeMaximum(12);
//Log.i(UtilitiesGlobal.TAG, "onSuccess: loopj " + usuarioiJSONbject);
Log.i(UtilitiesGlobal.TAG, "onSuccess: loopj " + "temperatura: " + temperatura + " presion: "
+ presion + " Fecha Inserción: " + fecha);
}
@Override
public void onLoopCompleteBarometro() {
setData();
// it takes time to recieve time. so we set the map after loop is complete okay?
//mChart.setVisibleXRangeMaximum(5);
}
jetzt Hier ist die Klasse mit Hash-Code und entspricht Methode
public class ParametrosBarometro {
int i;
String Id_temperatura;
String temperatura;
String fecha_temperatura;
String presion;
String altitud;
public ParametrosBarometro(String Id_temperatura, String temperatura, String fecha_temperatura, String presion, String altitud) {
this.Id_temperatura = Id_temperatura;
this.temperatura = temperatura;
this.fecha_temperatura = fecha_temperatura;
this.presion = presion;
this.altitud = altitud;
}
@Override
public boolean equals(Object o) {
if (o instanceof ParametrosBarometro) {
ParametrosBarometro p = (ParametrosBarometro) o;
return this.Id_temperatura.equals(p.Id_temperatura);
} else {
return false;
}
}
@Override
public int hashCode() {
return this.Id_temperatura.length() * this.Id_temperatura.length();
}
}
Sie verwenden niemals 'i' in dieser Methode. Und was ist der Zweck dieser Methode? Sie vergeben nur lokale Variablen. –
Und da Sie nach einer HashMap fragen, dann denke ich, dass Sie die Werte für die eindeutigen Schlüssel neu zuweisen und jedes Mal überschreiben. –
Ihre Frage ist ein bisschen vage (oder zumindest die bereitgestellten Informationen, um es zu verstehen). Bitte geben Sie den vollständigen Code an, der zeigt, dass Sie zumindest versucht haben, etwas zum Laufen zu bringen. –