2

I am trying to pull data from parse.com and place the resulting in a ListView.

The code itself has no errors however when i run it, it crashes and i have no idea why.

LogCat suggests the bug is in the 'doInBackground' method however i have not been able to find a way to solve this.

i feel there is a simple solution to this.

thanks for any help :)

Fragment class:

public class fragname extends Fragment { 

// Declare Variables
ListView listview;
List<ParseObject> ob;
ProgressDialog mProgressDialog;
ArrayAdapter<String> adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
    // inflat and return the layout
    View v = inflater.inflate(R.layout.listview_main, container, false);

    new RemoteDataTask().execute();


    return v;
}

private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(getActivity());
        // Set progressdialog title
        mProgressDialog.setTitle("Loading Programme, Please Wait :)");
        // Set progressdialog message
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();

    }

    @Override
    protected Void doInBackground(Void... params) {
        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                "Country");
        query.orderByDescending("country");

            try {
                ob = query.find();
            } catch (com.parse.ParseException e) {
Toast.makeText(getActivity(), "Error, " +     e.getMessage(), Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }

        return null;            
    }}

protected void onPostExecute(Void result){

    listview = (ListView) getView().findViewById(R.id.listview);        
    adapter = new ArrayAdapter<String>(getActivity(), R.layout.listview_item);      
    for (ParseObject country : ob) {
        adapter.add((String) country.get("country"));
    }       
    listview.setAdapter(adapter);       
    mProgressDialog.dismiss();  
}

listview_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

</RelativeLayout>

listview.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5sp"
android:textSize="25sp" >

</TextView>

LogCat:

12-03 16:13:30.380: D/dalvikvm(10654): GC_CONCURRENT freed 7646K, 53% free 6933K/14663K,           paused 2ms+6ms
12-03 16:13:30.380: E/AndroidRuntime(10654): FATAL EXCEPTION: AsyncTask #1
12-03 16:13:30.380: E/AndroidRuntime(10654): java.lang.RuntimeException: An error occured                                                                    while executing doInBackground()
12-03 16:13:30.380: E/AndroidRuntime(10654):    at     android.os.AsyncTask$3.done(AsyncTask.java:278)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at    java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at    java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at    java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.lang.Thread.run(Thread.java:856)
12-03 16:13:30.380: E/AndroidRuntime(10654): Caused by: java.lang.RuntimeException: You must call Parse.initialize(context, oauthKey, oauthSecret) before using the Parse library.
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseUser.checkApplicationContext(ParseUser.java:853)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseUser.getCurrentUser(ParseUser.java:726)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseUser.getCurrentSessionToken(ParseUser.java:756)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.findFromNetworkAsync(ParseQuery.java:511)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.access$4(ParseQuery.java:510)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery$5.runOnNetworkAsync(ParseQuery.java:455)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.runCommandWithPolicyAsync(ParseQuery.java:397)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.findWithCachePolicyAsync(ParseQuery.java:466)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.findAsync(ParseQuery.java:449)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at com.parse.ParseQuery.find(ParseQuery.java:489)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.doInBackground(FindPeopleFragme  nt.java:66)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.doInBackground(FindPeopleFragment.java:1)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
12-03 16:13:30.380: E/AndroidRuntime(10654):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-03 16:13:30.380: E/AndroidRuntime(10654):    ... 5 more
12-03 16:13:30.870: D/OpenGLRenderer(10654): Flushing caches (mode 0)
12-03 16:13:30.880: D/OpenGLRenderer(10654): Flushing caches (mode 0)
12-03 16:13:31.390: D/OpenGLRenderer(10654): Flushing caches (mode 1)
12-03 16:13:31.400: E/WindowManager(10654): Activity  info.androidhive.slidingmenu.MainActivity has leaked window  com.android.internal.policy.impl.PhoneWindow$DecorView@41874b28 that was originally added here
12-03 16:13:31.400: E/WindowManager(10654): android.view.WindowLeaked: Activity    info.androidhive.slidingmenu.MainActivity has leaked window   com.android.internal.policy.impl.PhoneWindow$DecorView@41874b28 that was originally added here
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
12-03 16:13:31.400: E/WindowManager(10654):     at android.view.Window$LocalWindowManager.addView(Window.java:537)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.Dialog.show(Dialog.java:278)
12-03 16:13:31.400: E/WindowManager(10654):     at info.androidhive.slidingmenu.FindPeopleFragment$RemoteDataTask.onPreExecute(FindPeopleFragment.java:53)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.AsyncTask.execute(AsyncTask.java:511)
12-03 16:13:31.400: E/WindowManager(10654):     at info.androidhive.slidingmenu.FindPeopleFragment.onCreateView(FindPeopleFragment.java:35)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.BackStackRecord.run(BackStackRecord.java:622)
 12-03 16:13:31.400: E/WindowManager(10654):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.Handler.handleCallback(Handler.java:605)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-03 16:13:31.400: E/WindowManager(10654):     at android.os.Looper.loop(Looper.java:137)
12-03 16:13:31.400: E/WindowManager(10654):     at android.app.ActivityThread.main(ActivityThread.java:4446)
12-03 16:13:31.400: E/WindowManager(10654):     at java.lang.reflect.Method.invokeNative(Native Method)
12-03 16:13:31.400: E/WindowManager(10654):     at java.lang.reflect.Method.invoke(Method.java:511)
12-03 16:13:31.400: E/WindowManager(10654):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-03 16:13:31.400: E/WindowManager(10654):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-03 16:13:31.400: E/WindowManager(10654):     at dalvik.system.NativeStart.main(Native Method)
12-03 16:13:32.360: I/Process(10654): Sending signal. PID: 10654 SIG: 9

Edit

Parse Application class

public class ParseApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();

    // Add your initialization code here
    Parse.initialize(this, "**parse key**","**parse key**");

    ParseUser.enableAutomaticUser();
    ParseACL defaultACL = new ParseACL();

    // If you would like all objects to be private by default, remove this
    // line.
    defaultACL.setPublicReadAccess(true);

    ParseACL.setDefaultACL(defaultACL, true);
}

}
1
  • Please don't use the tag parsing for parse.com, which is a completely different topic. Commented Dec 3, 2013 at 17:19

1 Answer 1

1

You need to call Parse.initialize(context, oauthKey, oauthSecret) in your application before you make any queries to Parse. This tells the service which app is yours. You can find the keys on your Parse Dashboard.

This blog post might be helpful: http://www.michaelevans.org/blog/2013/08/14/tutorial-building-an-android-to-do-list-app-using-parse/

Sign up to request clarification or add additional context in comments.

3 Comments

i have a parse application class with relevant keys(removed in edit), is this not the way to do it? - see edit. Thanks for the speedy reply
Is that class specified in your AndroidManifest.xml?
Solved this by adding "Parse.initialize(this, "parse key","parse key");" to the onCreate method in my fragment class. Blog post helped thanks

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.