2016-09-10 4 views
-1

루프에서 JSONObject 및 "i"를 제공하는 인터페이스를 사용하여 루프를 통해 데이터를 수신하고 있습니다. 때마다 나는 다른 하나가 나타납니다데이터를 HashMap에 보관하십시오.

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

을 내가 한 모든 JsonObjects을 유지할 필요가 HashMap-하지만 그것을 시도 할 때마다, 인터페이스의 데이터가 다음 단 하나의 객체 "마지막을"덮어 쓰기 및에 지도 및 다른 것들은 삭제됩니다.

내 코드에서 구현하는 방법을 높이 평가할 것입니다. 여기에 코드를 씁니다. 의 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); 
} 

는 방법

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

내가하고 "I"루프에서 내게 된 JSONObject를 제공하는 인터페이스를 사용하여 루프 데이터를 수신하고 해시 코드와 클래스와 동일 . [...] HashMap의 키 값으로 "Id"에서 수신중인 매개 변수 "Id_temp"가 필요합니다.

확인. 이처럼 간단 :

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

당신이 볼 수 있듯이, 인 키 정수 (자바 런타임 환경에 번들 클래스 인)는 hashCodeequals 방법 (정수를 가지고 오버라이드 (override) 할 필요가 없습니다 이미).

관련 문제