2017-03-07 127 views
-2

在設備上安裝應用程序後,應用程序在打開後立即關閉。開啓後立即關閉Android應用程序

我正在通過Udacity學習android。在第3課中,他們給了我最小布局的Android代碼 。[Udacity code] [1]。所以他們告訴開發完整​​的代碼,以適配器視圖格式顯示Magnitude位置和日期。

Studio未示出任何錯誤,但如果我將光標上getMagnitude()方法它表示方法調用getMagnitude可以產生「顯示java.lang.NullPointerException」和用於setAdapter還它顯示同樣的事情和我的完整的代碼是聽到

EarthquakeActivity.java 




/*`` 
* Copyright (C) 2016 The Android Open Source Project 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 
package com.example.android.quakereport; 
import java.lang.String; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.util.ArrayList; 

public class EarthquakeActivity extends AppCompatActivity { 

    public static final String LOG_TAG = EarthquakeActivity.class.getName(); 

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

     // Create a fake list of earthquake locations. 
     ArrayList<Earthquake> earthquakes = new ArrayList<>(); 
     earthquakes.add(new Earthquake("7.2","San Francisco", "Feb 2,2017 ")); 
     earthquakes.add(new Earthquake("5.2","London", "Oct 2,2017 ")); 
     earthquakes.add(new Earthquake("9.2","Tokyo", "Feb 2,2017 ")); 
     earthquakes.add(new Earthquake("8.2","Mexico City", "Mar 2,2017 ")); 
     earthquakes.add(new Earthquake("7.2","Mascow", "Feb 16,2017 ")); 
     earthquakes.add(new Earthquake("6.2","Rio de Jeneiro", "Feb 28,2017 ")); 
     earthquakes.add(new Earthquake("1.2","India", "Jan 2,2017 ")); 


     // Find a reference to the {@link ListView} in the layout 
     ListView earthquakeListView = (ListView) findViewById(R.id.list); 

     // Create a new {@link ArrayAdapter} of earthquakes 
    EarthquakeAdapter adapter = new EarthquakeAdapter(this ,earthquakes); 

     // Set the adapter on the {@link ListView} 
     // so the list can be populated in the user interface 
     earthquakeListView.setAdapter(adapter); 
    } 
} 

Earthquake.java

package com.example.android.quakereport; 

/** 
* Created by raghavendra on 3/7/2017. 
*/ 

public class Earthquake { 


    private String mMagnitude; 

    private String mLocation; 

    private String mDate; 


    public Earthquake(String Magnitude, String Location, String Date) 
    { 
     mMagnitude = Magnitude; 

     mLocation = Location; 

     mDate = Date; 

    } 

    public String getMagnitude() 
    { 

     return mMagnitude; 
    } 

    public String getLocation() 
    { 

     return mLocation; 
    } 

    public String getDate() 
    { 

     return mDate; 
    } 




} 

Ë arthquakeAdapter.java

package com.example.android.quakereport; 

import android.content.Context; 
import android.support.annotation.NonNull; 
import android.support.v7.view.menu.ListMenuItemView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

import java.util.List; 

/** 
* Created by raghavendra on 3/7/2017. 
*/ 

public class EarthquakeAdapter extends ArrayAdapter<Earthquake> { 

    public EarthquakeAdapter(Context context, List<Earthquake> earthquakes) { 
     super(context, 0, earthquakes); 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Check if the existing view is being reused, otherwise inflate the view 
     View listItemView = convertView; 
     if (listItemView == null) { 
      listItemView = LayoutInflater.from(getContext()).inflate(
        R.layout.earthquake_activity, parent, false); 
     } 

     Earthquake currentEarthquake = getItem(position); 



     TextView magnitudeView = (TextView) listItemView.findViewById(R.id.magnitude); 

     magnitudeView.setText(currentEarthquake.getMagnitude()); 

     TextView locationView = (TextView) listItemView.findViewById(R.id.location); 

     locationView.setText(currentEarthquake.getLocation()); 

     TextView dateView = (TextView) listItemView.findViewById(R.id.date); 

     dateView.setText(currentEarthquake.getDate()); 






return listItemView; 



    } 

} 








    [1]: https://github.com/udacity/ud843-QuakeReport 
+0

plz有人發現問題。 –

+3

請發佈錯誤日誌 –

+1

您上傳的代碼中沒有getMagnitude。這只是課程的起點。請推動您的更改。 –

回答

0

我認爲這個問題是您的Earthquake.java

嘗試;

public class Earthquake { 


    private String mMagnitude; 

    private String mLocation; 

    private String mDate; 


    public Earthquake(String Magnitude, String Location, String Date) 
    { 
     this.mMagnitude = Magnitude; 

     this.mLocation = Location; 

     this.mDate = Date; 

    } 

    public String getMagnitude() 
    { 

     return mMagnitude; 
    } 

    public String getLocation() 
    { 

     return mLocation; 
    } 

    public String getDate() 
    { 

     return mDate; 
    } 
} 
0

您的地震類沒有默認的構造函數。因此,mMagnitude可能是零,你應該把它設置爲

private String mMagnitude = ""; 

或添加默認構造地震類:

public Earthquake() { 
    mMagnitude = ""; 
    ... 
} 
相關問題