2016-06-01 16 views
1

MainActiviy에 선 그래프를 표시하는 앱을 만들고 있습니다. 맨 위 버튼은 다른 활동으로 연결됩니다. 그래프를 만들었을 때 두 번째 활동에는 TextView 만 포함되어 있었고 앱이 실행 중이었습니다.

나는 다른 활동에서 사용자가 SQLite 데이터베이스에 저장할 데이터를 추가 할 수있는 시스템을 구현하고자했습니다. 나는 theewboston에서 자습서 49에서 54를 따랐다.

나는 믿는다. 나는 튜토리얼에서와 똑같이했다. 그럼에도 불구하고, 내 응용 프로그램이 실행되지 않고이 오류를 제공합니다 :

FATAL EXCEPTION: main. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference.

전체 오류

아래 찾을 수 할 수 있습니다. 누군가가 오류 수정을 도와 줄 수 있습니까?

오류 메시지

FATAL EXCEPTION: main Process: com.example.shanna.linechartgenerator, PID: 27077 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.shanna.linechartgenerator/com.example.shanna.linechartgenerator.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2216) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) at android.app.ActivityThread.access$800(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.support.v7.app.AppCompatDelegateImplBase.(AppCompatDelegateImplBase.java:68) at android.support.v7.app.AppCompatDelegateImplV7.(AppCompatDelegateImplV7.java:146) at android.support.v7.app.AppCompatDelegateImplV11.(AppCompatDelegateImplV11.java:28) at android.support.v7.app.AppCompatDelegateImplV14.(AppCompatDelegateImplV14.java:41) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:190) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:172) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:512) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:184) at com.example.shanna.linechartgenerator.MainActivity.(MainActivity.java:18) at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.Class.newInstance(Class.java:1572) at android.app.Instrumentation.newActivity(Instrumentation.java:1065) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2206) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365)  at android.app.ActivityThread.access$800(ActivityThread.java:148)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5272)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)

MainActivity.Java :

package com.example.shanna.linechartgenerator; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 

import com.github.mikephil.charting.charts.LineChart; 
import com.github.mikephil.charting.data.Entry; 
import com.github.mikephil.charting.data.LineData; 
import com.github.mikephil.charting.data.LineDataSet; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    //public static final int ThresholdValue = 1; 
    LineChart lineChart = (LineChart) findViewById(R.id.chart); 
    //float newThreshold; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     // creating list of entry 
     ArrayList<Entry> entries = new ArrayList<>(); 
     entries.add(new Entry(4f, 0)); 
     entries.add(new Entry(8f, 1)); 
     entries.add(new Entry(6f, 2)); 
     entries.add(new Entry(2f, 3)); 
     entries.add(new Entry(18f, 4)); 
     entries.add(new Entry(9f, 5)); 

     LineDataSet dataset = new LineDataSet(entries, "# of Calls"); 

     // creating labels 
     ArrayList<String> labels = new ArrayList<String>(); 
     labels.add("January"); 
     labels.add("February"); 
     labels.add("March"); 
     labels.add("April"); 
     labels.add("May"); 
     labels.add("June"); 

     LineData data = new LineData(labels, dataset); 
     lineChart.setData(data); // set the data and list of lables into chart 
    } 

    public void goToActivityOne(View view){ 
     Intent intent = new Intent(this,ActivityOne.class); 
     startActivity(intent); //go to other activity in app 
    } 

    public void goToOtherApp(View view){ 
     Intent intent2 = new Intent("HelloWorld_MakeValue"); 
     //intent2.putExtra("newThreshold", newThreshold); 

     startActivity(intent2); //To go to activity in the other app 
     //startActivityForResult(intent2, ThresholdValue); 
    } 
} 

ActivityOne.java (데이터베이스에 저장하는 입력과 함께 활동)

package com.example.shanna.linechartgenerator; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class ActivityOne extends AppCompatActivity { 

    private EditText userInput; 
    private TextView userText; 
    private MyDBHandler dbHandler; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_one_layout); 

     userInput = (EditText) findViewById(R.id.userInput); 
     userText = (TextView) findViewById(R.id.userText); 
     dbHandler = new MyDBHandler(this, null, null, 1); //has 4 paramethers: context, DATABASE_NAME, factory, DATABASE_VERSION, see class 

     //method for add button, see below 
     printDataBase(); 

     //method for the delete button, see below 

     //method for printing, see below 
    } 

    public void addButtonClicked(View view){ 
     Painscales painscales = new Painscales(userInput.getText().toString()); 
     dbHandler.addPainscale(painscales); 
     printDataBase(); 
     //whenever user clicks the add button, take the input, add it to the database and print in below 
    } 

    public void printDataBase(){ 
     String dbString = dbHandler.databaseToSting(); //get sting we retreived 
     userText.setText(dbString); //store it in here 
     userInput.setText(" "); //take input and set text to 'refresh' the input 
    } 

    public void deleteButtonClicked(View view){ 
     String inputText = userInput.getText().toString(); 
     dbHandler.deletePainscale(inputText); 
     printDataBase(); 

    } 


} 

MyDBHandler 클래스

,228,368,933,663,123,210

현재이 초기화 할 수 없습니다

package com.example.shanna.linechartgenerator; 

/** 
* Created by Shanna on 1-6-2016. 
* class to deal with the user input 
* with the help of the youtube tutorial, "Android App Development for Beginners - 49 and 50, from thenewboston 
*/ 
public class Painscales { 
    //java needs an id number and the pain scale 
    private int _id; 
    private String _painscaleName; 

    public Painscales(){ 

    } 

    public Painscales(String painscaleName) { 
     this._painscaleName = painscaleName; //give input data automatically string to whatever user typed in 
    } 

    public void set_id(int _id) { 
     this._id = _id; //give input an id 
    } 

    public void set_painscaleName(String _painscaleName) { 
     this._painscaleName = _painscaleName; //set input as a name 
    } 

    public int get_id() { 
     return _id; //get input id 
    } 

    public String get_painscaleName() { 
     return _painscaleName; //get input name 
    } 
} 
+1

@Shanna 드 랭 -주의 깊게 스택 추적을 통해 이동하면 그건 그렇고, 당신은 코드의 대부분을 공유 할 필요가 없습니다 게다가. – nullpointer

+0

@Selvin 어떤 활동을 시작해야합니까? 나는 ActivityOne과 MainActivity의 onCreate 메소드에 setContentView를 가지고있다. –

답변

0

Painscales.java 클래스 : 당신처럼 거기 변수를 선언 할 수

LineChart lineChart = (LineChart) findViewById(R.id.chart); 

: 선 차트 선 차트를; 그리고 onCreateAFTERsetContentView를 호출에 같은 초기화를 넣어 :

lineChart = (LineChart) findViewById(R.id.chart); 
+0

고마워! 적어도 내 휴대 전화에서 내 앱을 열 수 있습니다. ActivityOne은 여전히 ​​충돌합니다. –

+0

기꺼이 도와 드리겠습니다. logcat 없이는 할 수 없습니다. 새로운 질문을 만들고 코멘트에 여기에 ping을 보내면 내가 살펴볼 것입니다. 기꺼이 도와 줘서, 친구. – Vucko