2016-09-10 12 views
-1

私はJSONObjectとループから "i"を与えているインターフェースを使ってループでデータを受け取ります。データをHashMapに保存する

{ 
    "Id_temp": "1", 
    "temperatura": "20", 
    "Insertado_temp": "2016-08-16 12:30:29" 
} 

そして、1つのオブジェクトのみ「最後の1が」である、私は1 HashMap-内のすべてのJsonObjectsを維持する必要があります。しかし、私はそれをしようとするたびに、インターフェースからのデータがそれを上書きして:私は別のものを受け取るたびに地図などが削除されます。

私は高い私のコードでそれを実装する方法のexempleをいただければ幸いです。ここで私はコードを書く。 HashMapのキー値として、私は、「ID」に受信されているパラメータ「Id_temp」が必要

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。今ここで

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

私は、「i」がループから私にJSONObjectを与えているインタフェースを使用してループを用いてデータを受信して​​いたクラスは、ハッシュコードであると方法

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

このメソッドでは、決して 'i'を使用しません。そして、この方法の目的は何ですか?あなたはローカル変数を割り当てるだけです。 –

+0

そして、あなたはHashMapについて質問しているので、ユニークキーの値を再割り当てして毎回オーバーライドしていると思います。 –

+0

あなたの質問はちょっと曖昧です(または少なくともそれを理解するために提供された情報)。あなたが少なくとも何か作業をしようとしたことを示す完全なコードを提供してください。 –

答えて

0

に等しいです。 。 [...] HashMapのキー値として、 "Id"で受け取っているパラメータ "Id_temp"が必要です。

OK。

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

あなたは(Javaランタイム環境にバンドルクラスである)キーの整数である、見ることができるように、hashCodeequalsメソッドをオーバーライドする必要はありません(整数がそれらを持っている。このような単純な既に)。