Android在新线程上运行类

Android在新线程上运行类,android,Android,我正在尝试解析.pls文件以获取要播放的URL。我使用了以下代码,但它给出了networkonmainthread异常。我以前从未做过线程应用程序;如何在新线程上运行此类 public class GetStreamingUrl { private static String LOGTAG = "GetStreamingUrl"; private Context mContext; public String url1; public LinkedList<String> url2;

我正在尝试解析.pls文件以获取要播放的URL。我使用了以下代码,但它给出了networkonmainthread异常。我以前从未做过线程应用程序;如何在新线程上运行此类

public class GetStreamingUrl {
private static String LOGTAG = "GetStreamingUrl";
private Context mContext;
public String url1;
public LinkedList<String> url2; 

public GetStreamingUrl(Context context) {
Log.i(LOGTAG, "call to constructor");
this.mContext = context;

}

public LinkedList<String>  getStreamingUrl(String url) {

Log.i(LOGTAG, "get streaming url");
final BufferedReader br;
String murl = null;
LinkedList<String> murls = null;
try {
    URLConnection mUrl = new URL(url).openConnection();
    br = new BufferedReader(
            new InputStreamReader(mUrl.getInputStream()));
    murls = new LinkedList<String>();
    while (true) {
        try {
            String line = br.readLine();

            if (line == null) {
                break;
            }
            murl = parseLine(line);
            if (murl != null && !murl.equals("")) {
                murls.add(murl);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Log.i(LOGTAG, "url to stream :" + murl);
return murls;
}

private String parseLine(String line) {
if (line == null) {
    return null;
}
String trimmed = line.trim();
if (trimmed.indexOf("http") >= 0) {
    return trimmed.substring(trimmed.indexOf("http"));
}
return "";
    }



}
公共类GetStreamingUrl{
私有静态字符串LOGTAG=“GetStreamingUrl”;
私有上下文;
公共字符串url1;
公共链接列表url2;
公共GetStreamingUrl(上下文){
Log.i(LOGTAG,“调用构造函数”);
this.mContext=上下文;
}
公共链接列表getStreamingUrl(字符串url){
i(LOGTAG,“获取流媒体url”);
最终缓冲头br;
字符串murl=null;
LinkedList murls=null;
试一试{
URLConnection mUrl=新URL(URL).openConnection();
br=新的BufferedReader(
新的InputStreamReader(mUrl.getInputStream());
murls=新链接列表();
while(true){
试一试{
String line=br.readLine();
如果(行==null){
打破
}
murl=parseLine(行);
如果(murl!=null&&!murl.equals(“”){
添加(murl);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Log.i(LOGTAG,“指向流的url:+murl”);
返回murls;
}
专用字符串解析行(字符串行){
如果(行==null){
返回null;
}
String trimmed=line.trim();
if(trimmed.indexOf(“http”)>=0){
返回trimmed.substring(trimmed.indexOf(“http”);
}
返回“”;
}
}
我正在尝试解析.pls文件以获取要播放的URL。我使用了以下代码,但它给出了networkonmainthread异常。我以前从未做过线程应用程序;如何在新线程上运行此类?

只需执行以下操作:

public class GetStreamingUrl {
private static String LOGTAG = "GetStreamingUrl";
private Context mContext;
public String url1;
public LinkedList<String> url2; 

public GetStreamingUrl(Context context) {
Log.i(LOGTAG, "call to constructor");
this.mContext = context;

}

public LinkedList<String>  getStreamingUrl(String url) {

Log.i(LOGTAG, "get streaming url");
final BufferedReader br;
String murl = null;
LinkedList<String> murls = null;
try {
    URLConnection mUrl = new URL(url).openConnection();
    br = new BufferedReader(
            new InputStreamReader(mUrl.getInputStream()));
    murls = new LinkedList<String>();
    while (true) {
        try {
            String line = br.readLine();

            if (line == null) {
                break;
            }
            murl = parseLine(line);
            if (murl != null && !murl.equals("")) {
                murls.add(murl);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Log.i(LOGTAG, "url to stream :" + murl);
return murls;
}

private String parseLine(String line) {
if (line == null) {
    return null;
}
String trimmed = line.trim();
if (trimmed.indexOf("http") >= 0) {
    return trimmed.substring(trimmed.indexOf("http"));
}
return "";
    }



}
new Thread(new Runnable() {

            @Override
            public void run() {
                // DO YOUR STUFFS HERE

            }
        }).start();

希望这有帮助。

您可以使用AsyncTask并在其中完成工作。有关更多详细信息,请访问以下链接:


在哪里做?关于活动?或者在课堂上?你可以把它放在任何你想要的地方,比如当你想开始工作时,
onCreate
。它将启动一个单独的
线程
,在
运行
方法中执行操作。就这样。