Android:从php页面中使用分割*字符来检索字符串



有人能告诉我为什么这会导致我的应用程序崩溃吗?同样的代码也适用于我的其他应用程序,这就是为什么我很困惑。

我要做的是告诉我的应用程序转到http://omarcomputerservices.com/cartoons/cartoons.php?getCartoon&ID=1,然后从'*'字符拆分解析字符串。然后将其添加到数组中。

我已经添加了上网权限。

package com.omarreyes.youtubechannels;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.app.Activity;

public class StartingPoint extends Activity 
{

    ArrayList<String> images = new ArrayList<String>(); 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_starting_point);


        Button get = (Button) findViewById(R.id.button1);
        get.setOnClickListener(listener);  
    }
    private OnClickListener listener = new OnClickListener() 
    {
        public void onClick(View v) 
        {

            getImages();

        }
    };
    private void getImages()
    {
        try 
        {
            // Create a URL object
            URL url = new URL("http://omarcomputerservices.com/cartoons/cartoons.php?getCartoon&ID=1");
            // Read all of the text returned by the HTTP server
            BufferedReader in = new BufferedReader
            (new InputStreamReader(url.openStream()));
            String htmlText;
            while ((htmlText = in.readLine()) != null) 
            {
                // Keep in mind that readLine() strips the newline characters
                String[] data = htmlText.split("\*");

                images.add(data[0].toString());

            }
            in.close();
        } 
        catch (MalformedURLException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }

}

乍一看,我发现至少有一个原因导致你的应用程序崩溃- getImages()方法试图在主(UI)线程上执行网络操作。

由于网络操作非常耗时,它们必须在自己的线程中运行。为了加强这一规则,从Android API Level 11开始,如果你试图在UI线程上执行网络操作,就会抛出一个NetworkOnMainThreadException

要解决这个问题,你应该把访问网络的代码放到一个单独的线程中,例如放到一个AsyncTask中。

最新更新