Java Android布局问题:无法使用addView添加两个图表的两个布局(包括logcat错误)

Java Android布局问题:无法使用addView添加两个图表的两个布局(包括logcat错误),java,android,achartengine,Java,Android,Achartengine,我试图使用AChartEngine在垂直方向添加两个动态折线图。但是我在布局上遇到了一些问题。下面添加了相关的java文件、xml文件和logcat(我还有其他java文件,如Ubidots.java、Point.java和Context.java,但我认为这里不需要这些文件) LineGraph.java: public class LineGraph { private GraphicalView view; private TimeSeries dataset = new TimeSer

我试图使用AChartEngine在垂直方向添加两个动态折线图。但是我在布局上遇到了一些问题。下面添加了相关的java文件、xml文件和logcat(我还有其他java文件,如
Ubidots.java
Point.java
Context.java
,但我认为这里不需要这些文件)

LineGraph.java:

public class LineGraph {
private GraphicalView view;

private TimeSeries dataset = new TimeSeries("LDR Values");
private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();

private XYSeriesRenderer renderer = new XYSeriesRenderer(); // This will be used to customize line 1
private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); // Holds a collection of XYSeriesRenderer and customizes the graph

private GraphicalView view1;

private TimeSeries dataset1 = new TimeSeries("LDR Values");

private XYSeriesRenderer renderer1 = new XYSeriesRenderer(); // This will be used to customize line 1

public LineGraph()
{
    // Add single dataset to multiple dataset
    mDataset.addSeries(dataset);

    // Customization time for line 1!
    renderer.setColor(Color.BLUE);
    renderer.setPointStyle(PointStyle.SQUARE);
    renderer.setFillPoints(true);
    renderer.setDisplayChartValues(true);
    renderer.setChartValuesSpacing(10);


    // mRenderer: renderer that controls the full charts and add the single renderer for each series:
    // Enable Zoom
    //mRenderer.setZoomButtonsVisible(true);
    mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00));
    mRenderer.setXTitle("Day #");
    mRenderer.setYTitle("LDR Values");
    mRenderer.setYAxisMax(35000);
    mRenderer.setYAxisMin(20000);
    mRenderer.setShowGrid(true);
    mRenderer.setInScroll(true);

    // Add single renderer to multiple renderer
    mRenderer.addSeriesRenderer(renderer);

    /////////////////////////////////////

    mDataset.addSeries(dataset1);

    // Customization time for line 1!
    renderer1.setColor(Color.BLUE);
    renderer1.setPointStyle(PointStyle.SQUARE);
    renderer1.setFillPoints(true);
    renderer1.setDisplayChartValues(true);
    renderer1.setChartValuesSpacing(10);


    // mRenderer: renderer that controls the full charts and add the single renderer for each series:
    // Enable Zoom
    //mRenderer.setZoomButtonsVisible(true);
    mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00));
    mRenderer.setXTitle("Day #");
    mRenderer.setYTitle("Soil Humidity Values");
    mRenderer.setYAxisMax(35000);
    mRenderer.setYAxisMin(20000);
    mRenderer.setShowGrid(true);
    mRenderer.setInScroll(true);

    // Add single renderer to multiple renderer
    mRenderer.addSeriesRenderer(renderer1);


}

public GraphicalView getView(Context context)
{
    view =  ChartFactory.getLineChartView(context, mDataset, mRenderer);
    return view;
}

public void addNewPoints(Point p)
{
    dataset.add(p.getX(), p.getY());
}

public GraphicalView getView1(Context context)
{
    view1 =  ChartFactory.getLineChartView(context, mDataset, mRenderer);
    return view1;
}

public void addNewPoints1(Point p1)
{
    dataset1.add(p1.getX(), p1.getY());
 }

}
activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/container"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.example.teerna.smartagriculturev5.MainActivity">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

<LinearLayout
    android:id="@+id/linearParent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/chart1"
        android:layout_width="fill_parent"
        android:layout_height="300dp"
        android:background="#a11111"
        android:orientation="vertical"/>
    <LinearLayout
        android:id="@+id/chart2"
        android:layout_width="fill_parent"
        android:layout_height="300dp"
        android:background="#a11111"
        android:orientation="vertical"/>

    </LinearLayout>
  </ScrollView>

</RelativeLayout>
日志:

02-07 21:28:07.203 26865-26865/com.example.teerna.smartagriculturev5 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.teerna.smartagriculturev5/com.example.teerna.smartagriculturev5.MainActivity}: java.lang.NullPointerException
                                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
                                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
                                                                                           at android.app.ActivityThread.access$700(ActivityThread.java:150)
                                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                           at android.os.Looper.loop(Looper.java:137)
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5283)
                                                                                           at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                           at java.lang.reflect.Method.invoke(Method.java:511)
                                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
                                                                                           at dalvik.system.NativeStart.main(Native Method)
                                                                                        Caused by: java.lang.NullPointerException
                                                                                           at android.view.ViewGroup.addViewInner(ViewGroup.java:3565)
                                                                                           at android.view.ViewGroup.addView(ViewGroup.java:3437)
                                                                                           at android.view.ViewGroup.addView(ViewGroup.java:3413)
                                                                                           at com.example.teerna.smartagriculturev5.MainActivity.onStart(MainActivity.java:109)
                                                                                           at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1181)
                                                                                           at android.app.Activity.performStart(Activity.java:5293)
                                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)
                                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299) 
                                                                                           at android.app.ActivityThread.access$700(ActivityThread.java:150) 
                                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280) 
                                                                                           at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                                           at android.os.Looper.loop(Looper.java:137) 
                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5283) 
                                                                                           at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                           at java.lang.reflect.Method.invoke(Method.java:511) 
                                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
                                                                                           at dalvik.system.NativeStart.main(Native Method) 
两次设置一个字段。永远都不要拿第二。试一试

view1 = line1.getView1(this);
两次设置一个字段。永远都不要拿第二。试一试

view1 = line1.getView1(this);

MainActivity
中的第109行有一个NPE。那是哪一行?@Napster它指向这一行://setContentView(第1行)@Napster实际上我必须在这里将
view
更改为
view1
view=line1.getView1(这个)。但是在我注释掉行
setContentView(第1行)之后设置内容视图(第2行)我在logcat
中得到一个错误,原因是:java.lang.IllegalStateException:指定的子级已经有父级。您必须首先对子级的父级调用removeView()。
在第
行setContentView(第1行)
尝试添加已具有父级布局的布局时会发生这种情况<代码>((视图组)第1行。getParent()).removeView(第1行)应该可以为您解决问题。
row1
有家长吗?让我们看看。在
main活动的第109行有一个NPE。那是哪一行?@Napster它指向这一行://setContentView(第1行)@Napster实际上我必须在这里将
view
更改为
view1
view=line1.getView1(这个)。但是在我注释掉行
setContentView(第1行)之后设置内容视图(第2行)我在logcat
中得到一个错误,原因是:java.lang.IllegalStateException:指定的子级已经有父级。您必须首先对子级的父级调用removeView()。
在第
行setContentView(第1行)
尝试添加已具有父级布局的布局时会发生这种情况<代码>((视图组)第1行。getParent()).removeView(第1行)应该可以为您解决问题。
row1
是否有父对象?让我们看看。但是,当我注释掉行
setContentView(row1)设置内容视图(第2行)我在logcat
中得到一个错误,原因是:java.lang.IllegalStateException:指定的子级已经有父级。您必须首先在子对象的父对象上调用removeView()。
在第
行setContentView(第1行)
但是当我注释掉第
行setContentView(第1行)时设置内容视图(第2行)我在logcat
中得到一个错误,原因是:java.lang.IllegalStateException:指定的子级已经有父级。您必须首先在子对象的父对象上调用removeView()。
第行
setContentView(第1行)
view = line.getView(this);
view = line1.getView1(this);
view1 = line1.getView1(this);