2017-03-07 89 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 = ""; 
    ... 
} 
相关问题