简体   繁体   中英

Null pointer Exception from Application subclass

I'm getting this NullPointerException error, and I don't know why. I'm really new to coding, so I am not fully understanding the explanations for sorting them out. I will try to provide the relevant information here.

I'm working from this tutorial .

Here is the stack trace from Logcat:

11-30 20:28:34.415 1294-1313/system_process I/ActivityManager: Displayed com.brasiltradefx.btfxalerts/.UserProfile: +1s84ms
11-30 20:28:34.433 13772-13802/com.brasiltradefx.btfxalerts E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab7d7980
11-30 20:28:37.164 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 10.648ms
11-30 20:28:37.237 1294-1306/system_process I/ActivityManager: START u0 {cmp=com.brasiltradefx.btfxalerts/.AlertMainActivity} from uid 10059 on display 0
11-30 20:28:37.315 13772-13772/com.brasiltradefx.btfxalerts D/AndroidRuntime: Shutting down VM
11-30 20:28:37.315 13772-13772/com.brasiltradefx.btfxalerts E/AndroidRuntime: FATAL EXCEPTION: main
                                                                              Process: com.brasiltradefx.btfxalerts, PID: 13772
                                                                              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.brasiltradefx.btfxalerts/com.brasiltradefx.btfxalerts.AlertMainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.toolbox.ImageLoader com.brasiltradefx.btfxalerts.app.AppController.getImageLoader()' on a null object reference
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                                  at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  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)
                                                                               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.toolbox.ImageLoader com.brasiltradefx.btfxalerts.app.AppController.getImageLoader()' on a null object reference
                                                                                  at com.brasiltradefx.btfxalerts.adapter.FeedListAdapter.<init>(FeedListAdapter.java:32)
                                                                                  at com.brasiltradefx.btfxalerts.AlertMainActivity.onCreate(AlertMainActivity.java:48)
                                                                                  at android.app.Activity.performCreate(Activity.java:6237)
                                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                                  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                  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) 
11-30 20:28:37.317 1294-1441/system_process W/ActivityManager:   Force finishing activity com.brasiltradefx.btfxalerts/.AlertMainActivity
11-30 20:28:37.324 1294-1441/system_process W/ActivityManager:   Force finishing activity com.brasiltradefx.btfxalerts/.UserProfile
11-30 20:28:37.383 1294-1793/system_process I/OpenGLRenderer: Initialized EGL, version 1.4
11-30 20:28:37.542 1294-1793/system_process W/EGL_emulation: eglSurfaceAttrib not implemented
11-30 20:28:37.542 1294-1793/system_process W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9cbb11e0, error=EGL_SUCCESS
11-30 20:28:37.831 1294-1308/system_process W/ActivityManager: Activity pause timeout for ActivityRecord{198e9e9 u0 com.brasiltradefx.btfxalerts/.AlertMainActivity t34 f}
11-30 20:28:47.251 1294-1308/system_process W/ActivityManager: Launch timeout has expired, giving up wake lock!
11-30 20:28:47.330 1294-1308/system_process W/ActivityManager: Activity destroy timeout for ActivityRecord{b9d213b u0 com.brasiltradefx.btfxalerts/.UserProfile t34 f}
11-30 20:28:54.408 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 9.171ms
11-30 20:28:57.300 1294-1308/system_process W/ActivityManager: Activity destroy timeout for ActivityRecord{198e9e9 u0 com.brasiltradefx.btfxalerts/.AlertMainActivity t34 f}
11-30 20:29:19.308 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 8.771ms
11-30 20:29:46.339 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 9.186ms
11-30 20:29:56.702 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 31.840ms
11-30 20:30:19.788 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 8.535ms
11-30 20:30:41.479 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 8.854ms
11-30 20:30:59.203 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 11.610ms
11-30 20:31:06.733 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 19.746ms
11-30 20:31:16.218 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 7.017ms
11-30 20:31:34.588 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 6.590ms
11-30 20:32:10.567 1294-1668/system_process D/ConnectivityService: reportNetworkConnectivity(100, false) by 10007
11-30 20:32:10.568 1294-1874/system_process D/NetworkMonitor/NetworkAgentInfo [MOBILE (UMTS) - 100]: Forcing reevaluation for UID 10007
11-30 20:32:10.627 1294-1874/system_process D/NetworkMonitor/NetworkAgentInfo [MOBILE (UMTS) - 100]: Checking http://connectivitycheck.gstatic.com/generate_204 on epc.tmobile.com, connectivitycheck.gstatic.com=74.125.21.139
11-30 20:32:10.656 1920-17221/com.google.android.gms I/EventLogService: Aggregate from 1448931729741 (log), 1448931729741 (data)
11-30 20:32:10.725 1294-1874/system_process D/NetworkMonitor/NetworkAgentInfo [MOBILE (UMTS) - 100]: isCaptivePortal: ret=204 headers={null=[HTTP/1.1 204 No Content], Content-Length=[0], Date=[Tue, 01 Dec 2015 01:40:19 GMT], Server=[GFE/2.0], X-Android-Received-Millis=[1448933530725], X-Android-Response-Source=[NETWORK 204], X-Android-Selected-Protocol=[http/1.1], X-Android-Sent-Millis=[1448933530679]}
11-30 20:32:10.726 1294-1335/system_process D/ConnectivityService: setProvNotificationVisibleIntent null visible=false networkType=MOBILE extraInfo=null highPriority=false
11-30 20:32:10.727 1294-1335/system_process D/ConnectivityService: NetworkAgentInfo [MOBILE (UMTS) - 100] validation  passed
11-30 20:32:10.836 1813-1826/com.google.process.gapps W/art: Suspending all threads took: 13.693ms
11-30 20:32:10.853 1813-1826/com.google.process.gapps I/art: Background sticky concurrent mark sweep GC freed 8892(951KB) AllocSpace objects, 0(0B) LOS objects, 18% free, 5MB/6MB, paused 15.651ms total 33.468ms
11-30 20:32:11.082 1813-17230/com.google.process.gapps I/PhenotypeFlagCommitter: Experiment Configs successfully retrieved for com.google.android.gms.playlog.uploader
11-30 20:32:11.085 1813-17230/com.google.process.gapps I/GoogleURLConnFactory: Using platform SSLCertificateSocketFactory
11-30 20:32:33.446 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 13.292ms
11-30 20:33:17.374 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 11.145ms
11-30 20:33:21.985 13772-13785/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 12.440ms
11-30 20:33:37.367 13772-13772/com.brasiltradefx.btfxalerts I/Process: Sending signal. PID: 13772 SIG: 9
11-30 20:33:37.395 1294-1793/system_process E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa1a9d4c0
11-30 20:33:37.451 1294-1668/system_process D/GraphicsStats: Buffer count: 6
11-30 20:33:37.452 1294-1668/system_process I/WindowState: WIN DEATH: Window{afedcc3 u0 com.brasiltradefx.btfxalerts/com.brasiltradefx.btfxalerts.GoogleInAppBilling}
11-30 20:33:37.496 1294-1686/system_process I/ActivityManager: Process com.brasiltradefx.btfxalerts (pid 13772) has died
11-30 20:33:37.528 18411-18411/? I/art: Not late-enabling -Xcheck:jni (already on)
11-30 20:33:37.528 18411-18411/? I/art: Late-enabling JIT
11-30 20:33:37.535 1294-1686/system_process I/ActivityManager: Start proc 18411:com.brasiltradefx.btfxalerts/u0a59 for activity com.brasiltradefx.btfxalerts/.GoogleInAppBilling
11-30 20:33:37.582 18411-18411/? I/art: JIT created with code_cache_capacity=2MB compile_threshold=1000
11-30 20:33:37.732 18411-18411/? W/System: ClassLoader referenced unknown path: /data/app/com.brasiltradefx.btfxalerts-1/lib/x86
11-30 20:33:38.016 18411-18438/com.brasiltradefx.btfxalerts I/GMPM: App measurement is starting up
11-30 20:33:38.021 18411-18438/com.brasiltradefx.btfxalerts E/GMPM: getGoogleAppId failed with status: 10
11-30 20:33:38.022 18411-18438/com.brasiltradefx.btfxalerts E/GMPM: Uploading is not possible. App measurement disabled
11-30 20:33:38.131 18411-18411/com.brasiltradefx.btfxalerts E/c3+U6b5T6IHUG94DJ22teQVKojk=:: PMSeT4Q8FLTjYUOwNpnShvIlw4E=
11-30 20:33:38.310 18411-18426/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 23.876ms
11-30 20:33:38.453 18411-18426/com.brasiltradefx.btfxalerts I/art: Background sticky concurrent mark sweep GC freed 11632(697KB) AllocSpace objects, 8(160KB) LOS objects, 65% free, 1265KB/3MB, paused 160.467ms total 230.843ms
11-30 20:33:38.485 18411-18422/com.brasiltradefx.btfxalerts W/art: Suspending all threads took: 28.821ms
11-30 20:33:38.694 1294-1313/system_process I/Choreographer: Skipped 65 frames!  The application may be doing too much work on its main thread.
11-30 20:33:38.718 1294-1313/system_process W/AppOps: Finishing op nesting under-run: uid 1000 pkg android code 24 time=0 duration=0 nesting=0

FeedListAdapter.java

package com.brasiltradefx.btfxalerts.adapter;

import com.brasiltradefx.btfxalerts.FeedImageView;
import com.brasiltradefx.btfxalerts.R;
import com.brasiltradefx.btfxalerts.app.AppController;
import com.brasiltradefx.btfxalerts.data.FeedItem;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.text.Html;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

/**
 * Created by Deryk on 11/30/2015.
 */
public class FeedListAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<FeedItem> feedItems;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
        this.activity = activity;
        this.feedItems = feedItems;
    }

    @Override
    public int getCount() {
        return feedItems.size();
    }

    @Override
    public Object getItem(int location) {
        return feedItems.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.feed_item, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();

        TextView name = (TextView) convertView.findViewById(R.id.name);
        TextView timestamp = (TextView) convertView
                .findViewById(R.id.timestamp);
        TextView statusMsg = (TextView) convertView
                .findViewById(R.id.txtStatusMsg);
        TextView url = (TextView) convertView.findViewById(R.id.txtUrl);

        TextView order_type = (TextView) convertView.findViewById(R.id.tvOrder_type);
        TextView pair = (TextView) convertView.findViewById(R.id.tvPair);
        TextView rate = (TextView) convertView.findViewById(R.id.tvRate);
        TextView quick_target = (TextView) convertView.findViewById(R.id.tvQuick_Target);
        TextView long_target = (TextView) convertView.findViewById(R.id.tvLong_Target);
        TextView stop_loss = (TextView) convertView.findViewById(R.id.tvStop_Loss);
        TextView break_even = (TextView) convertView.findViewById(R.id.tvBreak_Even);




        FeedImageView feedImageView = (FeedImageView) convertView
                .findViewById(R.id.feedImage1);

        FeedItem item = feedItems.get(position);

        name.setText(item.getName());

        // Converting timestamp into x ago format
        CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
                Long.parseLong(item.getTimeStamp()),
                System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);
        timestamp.setText(timeAgo);

        // Chcek for empty status message
        if (!TextUtils.isEmpty(item.getStatus())) {
            statusMsg.setText(item.getStatus());
            statusMsg.setVisibility(View.VISIBLE);
        } else {
            // status is empty, remove from view
            statusMsg.setVisibility(View.GONE);
        }

        // Checking for null feed url
        if (item.getUrl() != null) {
            url.setText(Html.fromHtml("<a href=\"" + item.getUrl() + "\">"
                    + item.getUrl() + "</a> "));

            // Making url clickable
            url.setMovementMethod(LinkMovementMethod.getInstance());
            url.setVisibility(View.VISIBLE);
        } else {
            // url is null, remove from the view
            url.setVisibility(View.GONE);
        }


        // Feed image
        if (item.getImge() != null) {
            feedImageView.setImageUrl(item.getImge(), imageLoader);
            feedImageView.setVisibility(View.VISIBLE);
            feedImageView
                    .setResponseObserver(new FeedImageView.ResponseObserver() {
                        @Override
                        public void onError() {
                        }

                        @Override
                        public void onSuccess() {
                        }
                    });
        } else {
            feedImageView.setVisibility(View.GONE);
        }

        return convertView;
    }

}

AlertMainActivity.java

package com.brasiltradefx.btfxalerts;

import com.brasiltradefx.btfxalerts.adapter.FeedListAdapter;
import com.brasiltradefx.btfxalerts.app.AppController;
import com.brasiltradefx.btfxalerts.data.FeedItem;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

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

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ListView;

import com.android.volley.Cache;
import com.android.volley.Cache.Entry;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonObjectRequest;

public class AlertMainActivity extends Activity {
    private static final String TAG = AlertMainActivity.class.getSimpleName();
    private ListView listView;
    private FeedListAdapter listAdapter;
    private List<FeedItem> feedItems;
    private String URL_FEED = "http://www.contrariantradefx.info/android/btfxalerts/fetchalertdata.json";  //todo change URL here -done!

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alert_main);

        listView = (ListView) findViewById(R.id.list);

        feedItems = new ArrayList<FeedItem>();

        listAdapter = new FeedListAdapter(this, feedItems);
        listView.setAdapter(listAdapter);


        // We first check for cached request
        Cache cache = AppController.getInstance().getRequestQueue().getCache();
        Entry entry = cache.get(URL_FEED);
        if (entry != null) {
            // fetch the data from cache
            try {
                String data = new String(entry.data, "UTF-8");
                try {
                    parseJsonFeed(new JSONObject(data));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

        } else {
            // making fresh volley request and getting json
            JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET,
                    URL_FEED, null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    VolleyLog.d(TAG, "Response: " + response.toString());
                    if (response != null) {
                        parseJsonFeed(response);
                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                }
            });

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

    }

    /**
     * Parsing json reponse and passing the data to feed view list adapter
     * */
    private void parseJsonFeed(JSONObject response) {
        try {
            JSONArray feedArray = response.getJSONArray("feed");

            for (int i = 0; i < feedArray.length(); i++) {
                JSONObject feedObj = (JSONObject) feedArray.get(i);

                FeedItem item = new FeedItem();
                item.setId(feedObj.getInt("id"));
                item.setName(feedObj.getString("name"));

                // Image might be null sometimes
                String image = feedObj.isNull("image") ? null : feedObj
                        .getString("image");
                item.setImge(image);
                item.setStatus(feedObj.getString("status"));
                item.setProfilePic(feedObj.getString("profilePic"));
                item.setTimeStamp(feedObj.getString("timeStamp"));

                // url might be null sometimes
                String feedUrl = feedObj.isNull("url") ? null : feedObj
                        .getString("url");
                item.setUrl(feedUrl);

                item.setOrder_type(feedObj.getString("order_type"));
                item.setPair(feedObj.getString("pair"));
                item.setRate(feedObj.getString("rate"));
                item.setQuick_target(feedObj.getString("quick_target"));
                item.setLong_target(feedObj.getString("long_target"));
                item.setStop_loss(feedObj.getString("stop_loss"));
                item.setBreak_Even(feedObj.getString("break_even"));

                feedItems.add(item);
            }

            // notify data changes to list adapter
            listAdapter.notifyDataSetChanged();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

I think it has to do with the AppController also, so I have included that.

package com.brasiltradefx.btfxalerts.app;

import com.brasiltradefx.btfxalerts.volley.LruBitmapCache;
import android.app.Application;
import android.text.TextUtils;

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


/**
 * Created by Deryk on 11/30/2015.
 */
public class AppController extends Application {

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

    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    LruBitmapCache mLruBitmapCache;

    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());
        }

        return mRequestQueue;
    }

    public ImageLoader getImageLoader() {
        getRequestQueue();
        if (mImageLoader == null) {
            getLruBitmapCache();
            mImageLoader = new ImageLoader(this.mRequestQueue, mLruBitmapCache);
        }

        return this.mImageLoader;
    }

    public LruBitmapCache getLruBitmapCache() {
        if (mLruBitmapCache == null)
            mLruBitmapCache = new LruBitmapCache();
        return this.mLruBitmapCache;
    }

    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);
        }
    }
}

Here is the manifest.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.brasiltradefx.btfxalerts">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="BTFX Alerts"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity android:name=".LoginActivity">
            android:label="BTFX Alerts" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".LogoutActivity"
            android:label="@string/title_activity_logout" />
        <activity android:name=".AlertsPage" />
        <activity android:name=".GoogleInAppBilling" />
        <activity android:name=".Blog" />
        <activity android:name=".ForexNews" />
        <activity android:name=".BTFXForum" />
        <activity android:name=".ForexShow" />
        <activity android:name=".ChartAnalysis" />
        <activity android:name=".UserProfile" />
        <activity android:name="com.facebook.LoginActivity" />
        <activity android:name="com.brasiltradefx.btfxalerts.app.AppController" />
        <!--
             ATTENTION: This was auto-generated to add Google Play services to your project for
             App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information.
        -->
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity android:name=".AlertPage" />
        <activity android:name=".FeedViewImage" />
        <activity android:name=".AlertMainActivity" />
        <activity android:name=".FeedImageView"></activity>
    </application>

</manifest>

Thx for any help given!

You return aa null -Object in your getInstance() Method of your AppController class and then try to invoke a method on that object.

To fix, replace

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

with

public static synchronized AppController getInstance() {
    if(mInstance == null){
        mInstance = new AppController();
    }
    return mInstance;
}

Are you sure you want a class which extends Application ?

You've got MyApplication specified in the Manifest, and it should be AppController to match your Application subclass.

If you look at the tutorial that you're working from, you'll see they reference the application class name in the AndroidManifest.xml:

<application
        android:name="info.androidhive.listviewfeed.app.AppController"

In your case, you can modify your AndroidManifest with your AppController class with android:name="com.brasiltradefx.btfxalerts.app.AppController" to use your correct Application subclass:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.brasiltradefx.btfxalerts">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


    <application
        android:name="com.brasiltradefx.btfxalerts.app.AppController"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
            //......................

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM