我几乎整天都试图解决这个问题(或者感觉就像那样),我自己也不能这样做。所以我希望你能提供帮助。
首先,我点击了一个按钮 - 当发生这种情况时,会读取来自互联网的txt文件并保存在字符串中。在此过程中,ProcessDialog似乎显示该文件已被检索。
在下面的代码中,您将看到名为tv2的TextView,它纯粹是为了测试目的而实现的。
@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();
}
});
}
方法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();
}
}
现在,我希望能够使用String'标题'。因为我想将它拆分并在之后使用它。 例如,我一直在尝试将上面的public void run()方法扩展为以下内容:
public void run()
{
tv.setText(hdr);
hej = hdr.split("\n");
MessageShort(hej[1]);
}
MessageShort只是一个Toast方法,它将String作为参数。 'hej'被声明为:
public String[] hej = {};
如果'hdr'('headers')是“text01 \ ntext02 \ ntext03”,'hej'将是hej [0] = text01,hej [1] = text02等。
这也行得正常,一条Toast消息显示为hej [1]的“text02”。
这里真正的问题是我可以不在这些正在运行的线程之外使用'hej'或'headers'。例如,如果我 - 在方法btnMusicAll.setOnClickListener之后 - 编写相同的MessageShort语句(MessageShort(hej [1]);) - 应用程序崩溃!如果我尝试以某种方式使用“标题”,它也会崩溃。
请帮忙。
答案 0 :(得分:0)
听起来Async Task正是您所需要的。 创建一个派生自AsyncTask的类。覆盖doInBackground以下载文本并传递它。在做的同时可以发送进度消息。如果您准备好覆盖至少onPostExecute以定义应该发生的事情(在您的情况下显示您的Toast)
答案 1 :(得分:0)
由于您的节目无法运行,请尝试使用并检查结果。不确定是否有效
public void run()
{
tv.setText(hdr);
String tmpStr=new String(hdr);
hej = tmpStr.split("\n");
MessageShort(hej[1]);
}
答案 2 :(得分:0)
截止。
我设法让它发挥作用,但不确定这是否是最好的方法。
我使用AsyncTask,在我解释了onPostExecute方法中的ProgressDialog之后,我使用了putExtra方法来处理我需要字符串的Intent(从Internet上检索到)。我确信这在我上面的旧代码中也会起作用(不使用AsyncTask)。