Java程序可以运行,但不会在Android Studio中运行

时间:2015-10-06 03:32:38

标签: android

因此,对于课程,我必须使用RSS阅读器程序。代码基本上是给我们的,但我们必须把它放到android。代码在Java中运行,但是当我尝试在Android中运行它来修改它以便它将更改TextViews文本时,它会编译但是在运行时我会遇到一些我不理解的大量错误。这是我的代码。我假设它与我使用setText()或TextView对象有关。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    TextView rssFeed;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rssFeed = (TextView)findViewById(R.id.txtFeed);
        rssFeed.setText(readRSS("http://rss.cnn.com/rss/edition.rss"));
    }

    public static String readRSS(String urlAddress)
    {
        try{
            URL rssUrl = new URL(urlAddress);
            BufferedReader in = new BufferedReader(new InputStreamReader(rssUrl.openStream()));
            String sourceCode = "";
            String line;
            while ((line = in.readLine()) != null) {
                int titleEndIndex = 0;
                int titleStartIndex = 0;
                while (titleStartIndex >= 0) {
                    titleStartIndex = line.indexOf("<title>", titleEndIndex);
                    if (titleStartIndex >= 0) {
                        titleEndIndex = line.indexOf("</title>", titleStartIndex);
                        sourceCode += line.substring(titleStartIndex + "<title>".length(), titleEndIndex) + "\n";
                    }
                }
            }
            in.close();
            return sourceCode;
        }
        catch (MalformedURLException ue) {
            System.out.print("Malformed URL");
        }
        catch (IOException ioe)
        {
            System.out.println("Something went wrong reading the contents");
        }
        return "Program Failed";
    }

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txtFeed" />
</RelativeLayout>

logcat是

10-05 23:05:49.839 2087-2087/com.example.andrewsaarima.rssreader I/art: Not late-enabling -Xcheck:jni (already on)
10-05 23:05:49.840 2087-2087/com.example.andrewsaarima.rssreader I/art: Late-enabling JIT
10-05 23:05:49.843 2087-2087/com.example.andrewsaarima.rssreader I/art: JIT created with code_cache_capacity=2MB compile_threshold=1000
10-05 23:05:49.996 2087-2087/com.example.andrewsaarima.rssreader W/System: ClassLoader referenced unknown path: /data/app/com.example.andrewsaarima.rssreader-2/lib/x86
10-05 23:05:50.220 2087-2087/com.example.andrewsaarima.rssreader D/AndroidRuntime: Shutting down VM
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime: FATAL EXCEPTION: main
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime: Process: com.example.andrewsaarima.rssreader, PID: 2087
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.andrewsaarima.rssreader/com.example.andrewsaarima.rssreader.MainActivity}: android.os.NetworkOnMainThreadException
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.-wrap11(ActivityThread.java)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:  Caused by: android.os.NetworkOnMainThreadException
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at java.net.InetAddress.getAllByName(InetAddress.java:215)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at java.net.URL.openStream(URL.java:470)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.example.andrewsaarima.rssreader.MainActivity.readRSS(MainActivity.java:28)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.example.andrewsaarima.rssreader.MainActivity.onCreate(MainActivity.java:21)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:6237)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
10-05 23:05:50.487 2087-2087/com.example.andrewsaarima.rssreader E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
10-05 23:05:53.950 2087-2094/com.example.andrewsaarima.rssreader W/art: Suspending all threads took: 25.938ms
10-05 23:05:55.994 2087-2087/? I/Process: Sending signal. PID: 2087 SIG: 9

2 个答案:

答案 0 :(得分:4)

你应该在android中使用AsyncTask来调用rss feed url。它的实现非常简单。如果您不了解here,请首先阅读AsyncTask。然后根据AsyncTask实现您的代码:

    private class RSSTask extends AsyncTask<String, Void, String>
    {
        ProgressDialog pd;

        //onPreExecute() will be called before entering into background thread
        @Override
        protected void onPreExecute() 
        {
            super.onPreExecute();

            pd = ProgressDialog.show(context, "RSS Feed", "Fetching Rss Feed Please Wait");

        }

        //this is background thread called after onPreExecute()
        @Override
        protected String doInBackground(String... params) 
        {
            String rssResponse = readRSS(params[0])

            return rssResponse;
        }

        //called after doInBackground() finished
        @Override
        protected void onPostExecute(String result) 
        {
            super.onPostExecute(result);

            pd.dismiss();

            rssFeed.setText(result);// here result will be returning string from doInBackground()
        }
    }

将整个AsyncTask课程复制到MainActivity,然后

<强>替换

rssFeed.setText(readRSS("http://rss.cnn.com/rss/edition.rss"));

。通过

RSSTask rssT = new RSSTask(); rssT.execute("http://rss.cnn.com/rss/edition.rss");

希望你得到理想的输出。

答案 1 :(得分:2)

NetworkOnMainThreadException表示您不应在应用程序主线程中执行Web请求。而是使用Loaders(优先于AsyncTask,阅读here为什么)或某些网络库(例如VolleyRetrofit)。

获得并解析回复后,您可以将结果String传递到TextView