1

Hi guys i have a problem with AsyncTask and strings arrays... I have a splashscreen

SplashScreen.java:

public class SplashScreen extends Activity {

private boolean mIsBackButtonPressed;
private static final int SPLASH_DURATION = 6000; //6 seconds
private Handler myhandler;

int thread;
public String[] lista = new String[200];
public String[] Compagnia = new String[200];
public String[] CodiceVolo = new String[200];
public String[] Citta = new String[200];
public String[] OraPrevista = new String[200];
public String[] OraStimata = new String[200];
public String[] StatoVolo = new String[200];

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.splashscreen);
    new MyTask().execute("");

    myhandler = new Handler();

    // run a thread to start the home screen
    myhandler.postDelayed(new Runnable()
    {
        @Override
        public void run() 
        {
           finish();

           if (!mIsBackButtonPressed)
           {
                // start the home activity 
            //    Intent intent = new Intent(SplashScreen.this, MainActivity.class);
              //  SplashScreen.this.startActivity(intent);
           }

        }

    }, SPLASH_DURATION); 
}


//handle back button press
@Override
public void onBackPressed() 
{
    mIsBackButtonPressed = true;
    super.onBackPressed();
}



public class MyTask extends AsyncTask<String, Void, String> {
    ProgressDialog prog;
    String info;

    @Override
    protected void onPreExecute() {
        prog = new ProgressDialog(SplashScreen.this);
        prog.setMessage("Connessione in corso...");
        prog.show();
        prog.setCanceledOnTouchOutside(false);
        prog.setCancelable(false);
        thread = 0;
    }

    @Override
    protected String doInBackground(String... params) {
        try {           
            org.jsoup.nodes.Document doc = Jsoup.connect("http://s.eu").timeout(7*1000).get();

            org.jsoup.nodes.Element tabella = doc.getElementsByClass("tabella-voli").first();
            Iterator<org.jsoup.nodes.Element> iterator = tabella.select("td").iterator();

            while(iterator.hasNext()){
                thread++;

                Compagnia[thread] = iterator.next().text();
                CodiceVolo[thread] = iterator.next().text();
                Citta[thread] = iterator.next().text();
                OraPrevista[thread] = iterator.next().text();
                OraStimata[thread] = iterator.next().text();
                StatoVolo[thread] = iterator.next().text();
                System.out.println("SPLASH: "+CodiceVolo[thread]);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }return info;
    }

    @Override
    protected void onPostExecute(String result) { 
        super.onPostExecute(result);
        prog.dismiss();

        Bundle bundle = new Bundle();
        bundle.putString("edttext", "From Activity");
        arrivi fragobj = new arrivi();
        fragobj.setArguments(bundle);

        Intent intent = new Intent(SplashScreen.this, MainActivity.class);
       // intent.putExtra("key",CodiceVolo[2]);

        SplashScreen.this.startActivity(intent);


       // CheckRow();
    }
}// FINE THREAD 

I want to print my array in another class. in arrivi.java:

        public class arrivi extends Fragment {

ListView list;
List<RowItem> rowItems;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   View arrivi = inflater.inflate(R.layout.arrivi, container, false); 
   String strtext = getArguments().getString("edttext");
   System.out.println("CODCICE VOLO: "+strtext);


   return arrivi;
}

This doesn't work for me... Crash my app... Thank you

roxdragon
  • 95
  • 3
  • 11

1 Answers1

0

SplashScreen is a Activity class. And doing this SplashScreen x = new SplashScreen(); is wrong.

Quoting Raghav Sood @

Can i Create the object of a activity in other class?

By treating an Activity as a normal Java class, you end up with a null context. As most methods in an Activity are called on its Context, you will get a null pointer exception, which is why your app crashes.

Instead you can pass the value from SplashScreen to MainActivity using Intent.

Intent intent = new Intent(SplashScreen.this, MainActivity.class);
intent.putExtra("key",CodiceVolo[2])
SplashScreen.this.startActivity(intent);

In MainActivity

String value = getIntent().getStringExtra("key");

Edit:

arrivi fragobj = new arrivi();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
fragobj.setArguments(bundle)
transaction.replace(R.id.fragment_container, fragobj);
transaction.addToBackStack(null);
transaction.commit();
Community
  • 1
  • 1
Raghunandan
  • 132,755
  • 26
  • 225
  • 256
  • if i want passing arrays in a fragment? – roxdragon Apr 19 '14 at 17:18
  • passint arrays in fragment??. Elaborate. You can still use intent in fragment – Raghunandan Apr 19 '14 at 17:19
  • i can pass the array directly to fragment and start the mainactivity or do I have to pass before mainactivity? – roxdragon Apr 19 '14 at 17:30
  • @roxdragon i don't understand what you want. You can use intent in fragment to start a activity. What do you mean by "do I have to pass before mainactivity". i have no clue about that – Raghunandan Apr 19 '14 at 17:31
  • I have a splashscreen where run an asynctask. - populate the arrays and i want pass all arrays into the class: public class arrivi extends Fragment { – roxdragon Apr 19 '14 at 17:34
  • @roxdragon check this http://stackoverflow.com/questions/12739909/send-data-from-activity-to-fragment-in-android. Pls make it clear in your question. You haven't mentioned fragment at all – Raghunandan Apr 19 '14 at 17:36
  • yes sorry...in splashscreen.java Bundle bundle = new Bundle(); bundle.putString("edttext", "From Activity"); arrivi fragobj = new arrivi(); fragobj.setArguments(bundle); AND in arrivi class:String strtext = getArguments().getString("edttext"); System.out.println("CODCICE VOLO: "+strtext); but this crash – roxdragon Apr 19 '14 at 17:49
  • let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/51033/discussion-between-roxdragon-and-raghunandan) – roxdragon Apr 19 '14 at 17:59
  • The link and the code posted works. Off to sleep. Post the updated code will update tomo – Raghunandan Apr 19 '14 at 18:02
  • i have edited 1st post... in function onPostExecute() can you help me please? – roxdragon Apr 19 '14 at 18:11
  • I have tried String strtext = this.getArguments().getString("edttext"); with .this... NullPointer – roxdragon Apr 19 '14 at 18:45
  • I have edited splashscreen.xml and i have edit with and in the splashscreen.java: transaction.replace(R.id.frag, fragobj); but i get an error : The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, arrivi) – roxdragon Apr 20 '14 at 09:39