I’ve been trying to fix this problem almost all day (or it feels like that), and I really can’t do it myself. So I hope you can help.
First of all, I have a button that is clicked – when that happens, a txt file from the internet is read and saved in a String. While this is going on, a ProcessDialog appears to show that the file is retrieved.
In the code below you’ll see a TextView called tv2, it is purely implemented for testing purposes.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.music);
final TextView tv2 = (TextView)findViewById(R.id.textView1);
Button btnMusicAll = (Button)findViewById(R.id.btnMusicAll);
btnMusicAll.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
String wait = getString(R.string.pleaseWait);
String retrievingInfo = getString(R.string.retrievingInfo);
getReleaseInfoProgressDialog = ProgressDialog.show(Music.this, wait, retrievingInfo, true);
new Thread()
{
public void run()
{
try
{
headers = getStringFromUrl(getString(R.string.rlsHeaderURL));
setHeaders(headers,tv2);
}
catch(Exception e)
{
String error = getString(R.string.error0x01);
MessageShort(error);
}
// Remove progress dialog
getReleaseInfoProgressDialog.dismiss();
}
}.start();
}
});
}
And the method setHeaders:
public void setHeaders(final String hdr, final TextView tv)
{
try
{
runOnUiThread(
new Runnable()
{
public void run()
{
tv.setText(hdr);
}
});
}
catch(Exception e)
{
e.printStackTrace();
}
}
Now, I want to be able to use the String ‘headers’. Because I want to split it up and use it afterwards.
For example, I have been trying to expand the public void run() method above to the following:
public void run()
{
tv.setText(hdr);
hej = hdr.split("\n");
MessageShort(hej[1]);
}
MessageShort is simply a Toast method that takes a String as parameter.
‘hej’ is declared as:
public String[] hej = {};
If ‘hdr’ (‘headers’) is “text01\ntext02\ntext03”, ‘hej’ would be hej[0]=text01, hej[1]=text02, etc.
This also works ok, a Toast message appears stating “text02” for hej[1].
The real problem here is the fact that I can not use ‘hej’ or ‘headers’ outside these running threads. For example, if I – after the method btnMusicAll.setOnClickListener – write the same MessageShort statement (MessageShort(hej[1]);) – the application crashes! It also crashes if I try to use ‘headers’ somehow.
Please help.
Closing.
I managed to make it work, but not sure if it’s the best way to do it.
I use AsyncTask, and after I’ve dismissed the ProgressDialog in the onPostExecute method, I use the putExtra method for the Intent in which I need the String (that was retrieved from the internet). I’m sure this would work too in my old code above (without the use of AsyncTask).