Paul Lich
Paul Lich

Reputation: 174

How to parse an array from Parse.com in Android

i've got a little problem with my final project in Android and would really appreciate if someone could help.

I made a Parse.com database, with a "Sessions" table where I create a new line everytime a new Session from my app gets startet. In this line there's a column which gets an Integer-Array.

My issue is how to get single array values from this array.

So here's my Start-Activity, which puts the new object into my parse.com-table:

package de.lichtenberger.gottschalk.android;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import com.parse.FindCallback;
import com.parse.Parse;
import com.parse.ParseObject;
import com.parse.ParseQuery;

public class Liedwahl_Git extends Activity {




    private ArrayList<ParseObject> list;
    private ArrayList<SongData> details;
    private SongDataAdapter adapter;
    private ListView songListView;
    public Button ok;
    private EditText sessionText;
    public Boolean[] ableToPlay = new Boolean[30];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_liedwahl);

        Parse.initialize(this, "XxXxXxX", "xXxXxX"); 
        setupUI();
        new createListTask().execute();
        for(int i = 0; i<=29; i++){
            ableToPlay[i] = false;
        }



    }

    private void setupUI() {
        songListView = (ListView) findViewById(R.id.listeCheck);
        ok = (Button)findViewById(R.id.OkButton);
        ok.setVisibility(View.INVISIBLE);
    }

    private void setupOnClickListeners() {

        sessionText = (EditText)findViewById(R.id.newSession);

        ok.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                if(sessionText.getText().toString().isEmpty()){

                    Toast.makeText(getApplicationContext(), "Bitte Sessionname angeben!", Toast.LENGTH_SHORT).show();

                }else{


                    ParseObject session = new ParseObject("Sessions");
                    session.put("Name", sessionText.getText().toString());
                    session.put("Online", true);


                    for(int i = 0; i<=29; i++){

                        if(ableToPlay[i]==true){
                            session.addUnique("AbleToPlay", i);
                        }
                    }

                    session.saveInBackground();



                    Intent lagerfeuer = new Intent(Liedwahl_Git.this, Lagerfeuer_Lieder.class);


                    lagerfeuer.putExtra("ParseOb", sessionText.getText().toString());
                    Log.d("Parse", sessionText.getText().toString());
                    startActivity(lagerfeuer);


                }


            }
        });







    }

    private class createListTask extends AsyncTask<Void,Void,Integer>{

        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            dialog = new ProgressDialog(Liedwahl_Git.this);
            dialog.setMessage("Please wait, while loading!");
            dialog.setIndeterminate(true);
            dialog.setCancelable(false);
            dialog.show();


        }


        @Override
        protected Integer doInBackground(Void... arg0) {

            list = new ArrayList<ParseObject>();
            ParseQuery query = new ParseQuery("SongDatenbank");
            details = new ArrayList<SongData>();
            query.orderByAscending("IDS");

            query.findInBackground(new FindCallback() {
                SongData songDatas;

                @Override
                public void done(List<ParseObject> objects,
                        com.parse.ParseException e) {
                    if (e == null) {
                        Log.d("Parse", "Objektliste empfangen!");
                        list = (ArrayList<ParseObject>) objects;
                        int j = 0;
                        for (int i = 0; i < list.size(); i++) {
                            String artist = list.get(i).getString("artist");
                            String title = list.get(i).getString("title");
                            String duration = list.get(i).getString("duration");
                            String imageUrl = list.get(i).getString("imageUrl");
                            String anzahlObjekte = String.valueOf(j);
                            Log.d("Parse", "Artist: " + artist);
                            Log.d("Parse", "Title: " + title);
                            Log.d("Parse", "Duration: " + duration);
                            Log.d("Parse", "URL: " + imageUrl);
                            Log.d("Parse", "AnzahlObjekte: " + anzahlObjekte);
                            j++;

                            // /////////////////////////////////////////////////////////////////////////////////////////////
                            // /String in parse.com darf nicht länger als 120
                            // Zeichen sein, sonst NullPointerException!!!//
                            // ////////////////////////////////////////////////////////////////////////////////////////////

                            songDatas = new SongData(title, artist, duration,
                                    imageUrl);
                            details.add(songDatas);

                        }

                    } else {
                        Log.d("Parse", "Objektliste empfangen gescheitert!");

                    }
                    adapter = new SongDataAdapter(details, Liedwahl_Git.this);
                    songListView = (ListView)findViewById(R.id.listeCheck);
                    songListView.setAdapter(adapter);

                    songListView.setOnItemClickListener(new OnItemClickListener() {
                        public void onItemClick(AdapterView<?> arg0, View arg1,
                                int position, long arg3) {

                            Log.d("Parse", "Item"+position+"geklickt");

                            songListView.setItemChecked(position, true);

                            if (ableToPlay[position]==true) {
                                ableToPlay[position]=false;
                                Log.d("Parse", position + "unchecked");
                            }else {
                                ableToPlay[position]=true;
                                Log.d("Parse", position + "checked");
                            }



                        }

                    });

                }


            });

            return 1;
        }


        protected void onPostExecute(Integer result){
            ok.setVisibility(View.VISIBLE);
            setupOnClickListeners();
            dialog.dismiss();

        }




    }


}

here my activity which tries to receive that array:

package de.lichtenberger.gottschalk.android;

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

import android.app.Activity;
import android.content.Intent;
import android.net.ParseException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;

import com.parse.FindCallback;
import com.parse.GetCallback;
import com.parse.Parse;
import com.parse.ParseObject;
import com.parse.ParseQuery;



public class Lagerfeuer_Lieder extends Activity {

    private ImageButton navLyrics;
    private ImageButton navTune;
    private ImageButton navMusic;
    private ImageButton navChords;
    private ImageView guitar;
    private Button test;
    private String sessionName;
    private ParseObject songList;
    private String ableToPlay;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lagerfeuer__lieder);

        Parse.initialize(this, "hGxasGU6e0WQAOh5JIOGDfvFBKrYyBJKXIzxBfAG", "WsOPsXerpsFjsjekKKbZnnjAHvXy5PQHVQEB8Cqu");


        setupUI();
        setupOnClickListeners();

        getSongList();

    }

    private void getSongList() {
        sessionName = getIntent().getExtras().getString("ParseOb");

        ParseQuery pq = new ParseQuery("Sessions");
        pq.whereEqualTo("Name", sessionName);

        pq.getFirstInBackground(new GetCallback() {

            @Override
            public void done(ParseObject object, com.parse.ParseException e) {

                songList = object;
                ableToPlay = songList.getString("AbleToPlay");
            }
        });

        Log.d("Parse", songList.get("AbleToPlay").toString());



    }

    private void setupOnClickListeners() {

        navLyrics.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent navToLyrics = new Intent(Lagerfeuer_Lieder.this, Lyrics.class);
                navToLyrics.putExtra("BackButton", R.string.main);
                startActivity(navToLyrics);



            }
        });

        navTune.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent navToTune = new Intent(Lagerfeuer_Lieder.this, Tune.class);
                startActivity(navToTune);



            }
        });

        navMusic.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent navToMusic = new Intent(Lagerfeuer_Lieder.this, Music.class);
                startActivity(navToMusic);



            }
        });

        navChords.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent navToChords = new Intent(Lagerfeuer_Lieder.this, Chords.class);
                startActivity(navToChords);



            }
        });



    }

    private void setupUI() {

        navLyrics = (ImageButton)findViewById(R.id.navlyrics);
        navTune = (ImageButton)findViewById(R.id.navtune);
        navMusic = (ImageButton)findViewById(R.id.navmusic);
        navChords = (ImageButton)findViewById(R.id.navchords);
        guitar = (ImageView)findViewById(R.id.guitar);

        Animation animation = new TranslateAnimation(0, 500,0, 0);
        animation.setDuration(1000);
        animation.setFillAfter(true);
        guitar.startAnimation(animation);
        guitar.setVisibility(0);
        Log.d("Parse", getIntent().getExtras().getString("ParseOb"));


    }

    private void animation() {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        String objID = getIntent().getExtras().getString("ParseOb");
        Log.d("Parse", objID);
        ParseQuery pq = new ParseQuery("Sessions");
        pq.getInBackground(objID, new GetCallback() {

            @Override
            public void done(ParseObject arg0, com.parse.ParseException arg1) {
                ParseObject toDest = arg0;
                try {
                    toDest.delete();
                } catch (com.parse.ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


            }

            });

    }

}

Here you can see that eclipse actually got the Object with the array values:

Eclipse

Hope anyone got an idea how to fix this. Thanks in forward!

Upvotes: 2

Views: 1868

Answers (1)

Dinesh Prajapati
Dinesh Prajapati

Reputation: 9510

Problem is in below code

pq.getFirstInBackground(new GetCallback() {

            @Override
            public void done(ParseObject object, com.parse.ParseException e) {

                songList = object;
                ableToPlay = songList.getString("AbleToPlay");
            }
        });

Please check/debug the method getFirstInBackground which calls the interface GatcallBack with done method. so if that is returning ParseObject as null then there are more chance of getting NullPointerException.

Debugging here will help you lot

Upvotes: 1

Related Questions