每次运行应用程序都会崩溃并显示错误“不幸的是MyApplication1已经停止”

时间:2016-07-12 19:59:08

标签: json listview android-volley

我正在使用Volley库来获取json数据。我还修改了Manifest添加必要的Internet权限。但是当我运行应用程序时它会崩溃。

主要活动.java

 package com.example.sans.myapplication1;

    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ListView;
    import android.widget.Toast;

    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.JsonObjectRequest;
    import com.android.volley.toolbox.Volley;

    import org.json.JSONArray;
    import org.json.JSONObject;

    import java.util.ArrayList;
    import java.util.List;

    public class MainActivity extends AppCompatActivity {

        ListView listView;
        RequestQueue requestQueue;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            });
            listView=(ListView)findViewById(R.id.list);
            RequestQueue requestQueue= Volley.newRequestQueue(this);

            JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, "http://api.themoviedb.org/3/movie/popular?api_key=fa468af9e769ba5fbc027e9e933130ed",
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {

                            ArrayList<Movie> movieList= new ArrayList<Movie>();
                            try{
                                JSONArray jsonArray=response.getJSONArray("results");
                                for (int i=0;i< jsonArray.length();i++){
                                    JSONObject jsonObject= jsonArray.getJSONObject(i);
                                    String title= jsonObject.getString("title");

                                    movieList.add(new Movie(title));
                                    MovieAdapter adapter= new MovieAdapter(getApplicationContext(),movieList);
                                    listView.setAdapter(adapter);

                                }


                            }catch(Exception e){
                                Toast.makeText(getApplicationContext(), "Error getting data", Toast.LENGTH_LONG).show();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();

                        }
                    });
            requestQueue.add(jsonObjectRequest);


        }




    }

$ MovieAdapter.java

package com.example.sans.myapplication1;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by sans on 13/7/16.
 */
public class MovieAdapter extends ArrayAdapter<Movie> {


    public MovieAdapter(Context context, List<Movie> objects) {
        super(context,0, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Movie movie=getItem(position);
        if(convertView==null){
            convertView= LayoutInflater.from(getContext()).inflate(R.layout.list_row, parent);
        }
        TextView title=(TextView)convertView.findViewById(R.id.title);
        title.setText(movie.getTitle());

        return  convertView;


    }
}

$ Movie.java

package com.example.sans.myapplication1;

import android.app.Activity;
import android.content.Context;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by sans on 13/7/16.
 */

public class Movie {
    private String title;
    public Movie(String title){
        this.title=title;

    }

    public void setTitle(String title) {
        this.title = title;
    }


    public String getTitle() {
        return title;
    }

}

$ list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/listPreferredItemHeight"
        android:id="@+id/title"/>

</LinearLayout>

$ content_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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.sans.myapplication1.MainActivity"
    tools:showIn="@layout/activity_main">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/list" />
</RelativeLayout>

记录错误

FATAL EXCEPTION: main
                                                 Process: com.example.sans.myapplication1, PID: 4252
                                                 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
                                                     at com.example.sans.myapplication1.MovieAdapter.getView(MovieAdapter.java:29)
                                                     at android.widget.AbsListView.obtainView(AbsListView.java:2346)
                                                     at android.widget.ListView.measureHeightOfChildren(ListView.java:1280)
                                                     at android.widget.ListView.onMeasure(ListView.java:1188)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
                                                     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668)
                                                     at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                     at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
                                                     at android.view.View.measure(View.java:18788)
                                                     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
                                                     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
                                                     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
                                                     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                     at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                     at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                     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)
07-13 17:37:39.746 1532-1903/? W/ActivityManager:   Force finishing activity com.example.sans.myapplication1/.MainActivity

1 个答案:

答案 0 :(得分:0)

在MovieAdapter.java中,将convertView!=null更改为convertView==null
&安培;在 list_row.xml 文件中
而不是android:minHeight="?attr/listPreferredItemHeight"
将其更改为android:minHeight="?android:attr/listPreferredItemHeight"