与另一个班级发生冲突

时间:2015-03-31 13:51:27

标签: android

我运行了我的应用程序并显示了此错误:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wunderlist.slidinglayersample/com.wunderlist.slidinglayersample.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void app.AppController.addToRequestQueue(com.android.volley.Request)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            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:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void app.AppController.addToRequestQueue(com.android.volley.Request)' on a null object reference
            at com.wunderlist.slidinglayersample.MainActivity.redirect(MainActivity.java:331)
            at com.wunderlist.slidinglayersample.MainActivity.onCreate(MainActivity.java:110)
            at android.app.Activity.performCreate(Activity.java:5937)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            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:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

这是整个MainActivity:

package com.wunderlist.slidinglayersample;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.wunderlist.slidinglayer.SlidingLayer;

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

import app.AppController;
import util.Content;

public class MainActivity extends Activity {


    private GoogleMap googleMap;

    // json object response url
    private String urlJsonObj = "http://api.androidhive.info/volley/person_object.json";

    // json array response url
    private String urlJsonArry = "http://heimerdinger.pe.hu/getjson.php";
    //https://gist.githubusercontent.com/sanjogshrestha/968f713b4c707f4cfbd4/raw/b2c9fd087ad3d274ac8ae043049a8e98ce975814/Json

    //http://api.androidhive.info/volley/person_array.json

    private static String TAG = MainActivity.class.getSimpleName();

    // Progress dialog
    private ProgressDialog pDialog;

    Content content = new Content();
    public static String valueEntered;


    // temporary string to show the parsed response
    private String jsonResponse;

    private SlidingLayer mSlidingLayer;
    private TextView swipeText;

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



        googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.getUiSettings();
        googleMap.getUiSettings().setZoomControlsEnabled(true);


        bindViews();
        initState();

        redirect();


    }



    @SuppressLint("NewApi")
    @Override
    protected void onResume() {
        super.onResume();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    /**
     * View binding
     */
    private void bindViews() {
        mSlidingLayer = (SlidingLayer) findViewById(R.id.slidingLayer1);
//        swipeText = (TextView) findViewById(R.id.swipeText);
    }

    /**
     * Initializes the origin state of the layer
     */
    private void initState() {

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

        setupSlidingLayerPosition(prefs.getString("layer_location", "right"));

        setupShadow(prefs.getBoolean("layer_has_shadow", false));
        setupLayerOffset(prefs.getBoolean("layer_has_offset", false));
        setupPreviewMode(prefs.getBoolean("preview_mode_enabled", false));
    }

    private void setupSlidingLayerPosition(String layerPosition) {

        LayoutParams rlp = (LayoutParams) mSlidingLayer.getLayoutParams();
        int textResource;
        Drawable d;

//        if (layerPosition.equals("right")) {
            textResource = R.string.swipe_right_label;
            d = getResources().getDrawable(R.drawable.container_rocket_right);

            mSlidingLayer.setStickTo(SlidingLayer.STICK_TO_RIGHT);


        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
//        swipeText.setCompoundDrawables(null, d, null, null);
//        swipeText.setText(getResources().getString(textResource));
        mSlidingLayer.setLayoutParams(rlp);
    }

    private void setupShadow(boolean enabled) {
        if (enabled) {
            mSlidingLayer.setShadowSizeRes(R.dimen.shadow_size);
            mSlidingLayer.setShadowDrawable(R.drawable.sidebar_shadow);
        } else {
            mSlidingLayer.setShadowSize(0);
            mSlidingLayer.setShadowDrawable(null);
        }
    }

    private void setupLayerOffset(boolean enabled) {
        int offsetDistance = enabled ? getResources().getDimensionPixelOffset(R.dimen.offset_distance) : 0;
        mSlidingLayer.setOffsetDistance(offsetDistance);
    }

    private void setupPreviewMode(boolean enabled) {
        int previewOffset = enabled ? getResources().getDimensionPixelOffset(R.dimen.preview_offset_distance) : -1;
        mSlidingLayer.setPreviewOffsetDistance(previewOffset);
    }

    public void buttonClicked(View v) {
        switch (v.getId()) {
        case R.id.buttonOpen:
            mSlidingLayer.openLayer(true);
            break;
        case R.id.buttonClose:
            mSlidingLayer.closeLayer(true);
            break;
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            if (mSlidingLayer.isOpened()) {
                mSlidingLayer.closeLayer(true);
                return true;
            }

        default:
            return super.onKeyDown(keyCode, event);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        finish();
        return true;
    }







    private void redirect() {


        //showpDialog();

        JsonArrayRequest req = new JsonArrayRequest(urlJsonArry,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());


                        try {
                            Content content = new Content();
                            // Parsing json array response
                            // loop through each json object
                            jsonResponse = "";
                            for (int i = 0; i < response.length(); i++) {

                                JSONObject person = (JSONObject) response
                                        .get(i);

                                String name = person.getString("nosaukums");
                                String email = person.getString("nosaukums");
                                String relation = person.getString("nosaukums");

                                Double lat=person.getDouble("latCo");
                                Double lng=person.getDouble("longCo");


                                content.setName(name);

                                content.setPopulation(email);
                                content.setlat(lat);
                                content.setlng(lng);
                                content.setRelation(relation);
                                System.out.println("name="+content.getName()+content.getlat());
                                LatLng lt = new LatLng(content.getlat(), content.getlng());
                                content.setLatlng(lt);
                                //valueEntered=lt.toString();
                                System.out.println("address="+content.getLatlng());
                                        /*String home = latlng.getLong("home");
                                        String mobile = phone.getString("mobile");*/
                                System.out.println("relation="+content.getRelation());

                                jsonResponse += "Name: " + name + "\n\n";
                                jsonResponse += "Population: " + email + "\n\n";
                                jsonResponse += "Latitude: " + lat + "\n\n";
                                jsonResponse += "Longitude: " + lng + "\n\n\n";
                                jsonResponse += "Relation" + relation +"\n\n\n";

                                if(content.getRelation().equals("son"))
                                {
                                    googleMap.addMarker(new MarkerOptions()
                                            .position(lt)
                                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_son))
                                            .snippet(email)
                                            .title(content.getName())).showInfoWindow();

                                }
                                else
                                {
                                    googleMap.addMarker(new MarkerOptions()
                                            .position(lt)
                                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_daughter))

                                            .title(content.getName())).showInfoWindow();

                                }





                                CameraPosition cameraPosition = new CameraPosition.Builder().target(lt).zoom(15.0f).build();
                                CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
                                googleMap.moveCamera(cameraUpdate);



                            }

                            //txtResponse.setText(jsonResponse);

                        } catch (JSONException e) {
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(),
                                    "Error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }

                        //hidepDialog();


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                //hidepDialog();
            }
        });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(req);
    }

}

您对如何解决问题有什么想法吗?因为我认为我已正确导入所有内容并且在清单中MainActivity被称为主要活动。

修改

Manifest似乎也可以:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.wunderlist.slidinglayersample"
              android:versionCode="2"
              android:versionName="1.5">

        <uses-sdk
            android:minSdkVersion="11"
            android:targetSdkVersion="21" />

        <application
                android:allowBackup="true"
                android:icon="@drawable/ic_launcher"
                android:label="@string/app_name"
                android:theme="@style/AppTheme">

            <activity
                    android:name=".MainActivity"
                    android:label="@string/app_name"
                    android:launchMode="singleTop">

                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
...

AppController.java

import android.app.Application;
import android.text.TextUtils;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

import util.SslHttpStack;

//import com.android.volley.RequestQueue;

public class AppController extends Application {

    public static final String TAG = AppController.class.getSimpleName();

    private RequestQueue mRequestQueue;

    private static AppController mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    public static synchronized AppController getInstance() {
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(getApplicationContext(),new SslHttpStack(false));
        }

        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req, String tag) {
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }

    public <T> void addToRequestQueue(Request<T> req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }

    public void cancelPendingRequests(Object tag) {
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(tag);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这是因为

AppController.getInstance() == null

因为您没有初始化您的应用程序类。对于init app类,您需要放入清单。 只需将清单中的代码替换为下面的代码:

<application
              android:name="com.wunderlist.slidinglayersample.AppController"
              android:allowBackup="true"
              android:icon="@drawable/ic_launcher"
              android:label="@string/app_name"
              android:theme="@style/AppTheme">