【问题标题】:Error in jjoe64 GraphView Libraryjjoe64 GraphView 库中的错误
【发布时间】:2017-01-23 21:40:51
【问题描述】:

有人可以帮助我吗?我发现了这个错误,我找不到我的问题的解决方案。这是 Android 错误:

09-15 18:26:47.434 3096-3096/com.example.user.navigationdrawer E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.example.user.navigationdrawer, PID: 3096
  java.lang.IllegalArgumentException: new x-value must be greater then the last value. x-values has to be ordered in ASC.
  at com.jjoe64.graphview.series.BaseSeries.appendData(BaseSeries.java:388)
  at com.example.user.navigationdrawer.SeventhFragment$1.onDataChange(SeventhFragment.java:75)
  at com.firebase.client.Query$1.onDataChange(Query.java:158)
  at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)
  at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
  at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是我的代码:

package com.example.user.navigationdrawer;

import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.BarGraphSeries;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;
import com.jjoe64.graphview.series.Series;

public class SeventhFragment extends Fragment{

GraphView graphView;
FirebaseAuth auth;
FirebaseUser user;
Firebase mRef;
LineGraphSeries<DataPoint> series;

View myView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.seventh_layout, container, false);
    graphView = (GraphView) myView.findViewById(R.id.graph);

    auth = FirebaseAuth.getInstance();
    user = auth.getCurrentUser();

    if (user == null){
        Activity activity = getActivity();
        Toast.makeText(activity, "Per accedere a questa funzione devi aver effettuato il login.", Toast.LENGTH_SHORT).show();
        startActivity(new Intent(activity, LoginActivity.class));
    }

    graphView.getViewport().setXAxisBoundsManual(true);
    graphView.getViewport().setMinX(0.0);
    graphView.getViewport().setMaxX(24);
    // set manual Y bounds
    graphView.getViewport().setYAxisBoundsManual(true);
    graphView.getViewport().setMinY(0.0);
    graphView.getViewport().setMaxY(2000);

    graphView.getViewport().setScrollable(true);

    series = new LineGraphSeries<DataPoint>();

    mRef = new Firebase("my url" );
    mRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            final double Valore = dataSnapshot.getValue(double.class);
            series.appendData(new DataPoint(1, Valore), false, 24); //what number must i write here?
        }@Override
        public void onCancelled(FirebaseError firebaseError) {
        }});

    mRef = new Firebase("my url" );
    mRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            final double Valore = dataSnapshot.getValue(double.class);
            series.appendData(new DataPoint(2, Valore), false, 25); //what number must i write here?
        }@Override
        public void onCancelled(FirebaseError firebaseError) {

        }});

    graphView.addSeries(series);
    return myView;
}}

我想在图表中设置我从 FireBase 收到的数据,但它给了我一个错误。我正在使用库:com.jjoe64:graphview:4.1.0' 帮助!

【问题讨论】:

  • GraphView 期望您附加的数据必须按升序排列,这意味着每次 x 值都应大于先前附加的值。我看到您总是将 x 值设置为 12。这就是它出错的地方。您必须为附加的每个数据增加 x 值。如果您需要更准确的答案,则需要知道您在策划什么,x 和 y 名称。

标签: android firebase firebase-realtime-database android-graphview


【解决方案1】:

侦听器回调是异步的。这意味着您对graphView.addSeries(series) 的调用在您将DataPoints 附加到series 的回调触发之前执行。

详细解释,see this answer

【讨论】:

    【解决方案2】:

    将jar文件添加为库。说明你的项目中没有添加GraphView库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-24
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多