2016-09-10 3 views
-1

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(); 
} 

}

+0

Sie verwenden niemals 'i' in dieser Methode. Und was ist der Zweck dieser Methode? Sie vergeben nur lokale Variablen. –

+0

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. –

+0

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. –

Antwort

0

Ich empfange Daten mit Schleife über eine Schnittstelle, die mir JSONObject schenkt und „i“ von der Schleife . [...] Als Schlüsselwert von HashMap benötige ich den Parameter "Id_temp", der in "Id" empfangen wird.

OK. So einfach wie diese:

private final Map<Integer, MyBean> map=new HashMap<Integer, MyBean>(); 

private void createAndStoreObject(JsonObject json, int i) 
    throws ParseException 
{ 
    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    MyBean myBean=new MyBean(json.getInt("Id_temp"), json.getInt("temperatura"), format.parse(json.getString("Insertado_temp"))); 
    this.map.put(myBean.getId(), myBean); 
} 

class MyBean 
{ 
    private final int id; 

    private final int temperature; 

    private final Date insertionDate; 

    public MyBean(int id, int temperature, Date insertionDate) 
    { 
     super(); 
     this.id=id; 
     this.temperature=temperature; 
     this.insertionDate=insertionDate; 
    } 

    public int getId() 
    { 
     return this.id; 
    } 

    // ... getters ... 
} 

Wie Sie sehen können, die sein Schlüssel ein Integer (die eine Klasse mit dem Java Runtime Environment gebündelt ist), besteht keine Notwendigkeit, die hashCode noch equals Methoden (Integer hat sie außer Kraft zu setzen bereits).