当前位置: 首页 > 知识库问答 >
问题:

当我在TextView中放置在线文本时,应用程序崩溃

邹高懿
2023-03-14

当我运行以下代码时,我的应用程序崩溃:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_biografie);
        setTitle("Biografie");

        try {
            // Create a URL for the desired page
            URL url = new URL("http://xxx.nl/api/biografie.php?dataid=998");

            // Read all the text returned by the server
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String str;
            while ((str = in.readLine()) != null) {
                // str is one line of text; readLine() strips the newline character(s)
                TextView text = (TextView)findViewById(R.id.biografieText);
                text.setText(str);
            }
            in.close();
        } catch (MalformedURLException e) {
        } catch (IOException e) {
        }
    }

这是我的Logcat输出:

03-26 12:35:16.900: E/AndroidRuntime(30127): FATAL EXCEPTION: main 03-26 12:35:16.900: E/AndroidRuntime(30127):java.lang.RuntimeException:无法启动活动ComponentInfo{nl.appone.artistone.reneevanginkel/nl.appone.artistone.reneevanginkel.Biografie}:android.os.NetworkOnMainThreadException 03-26 12:35:16.900: E/AndroidRuntime(30127): atandroid.app.ActivityThread.performLaunchActive(ActivityThread.java:1956)03-26 12:35:16.900: E/AndroidRuntime(30127): atandroid.app.ActivityThread.handleLaunchActive(ActivityThread.java:1981)03-26 12:35:16.900: E/AndroidRuntime(30127): atandroid.app.ActivityThread.access600美元(ActivityT)03-26 12:35:16.900: E/AndroidRuntime(30127): atandroid.app.ActivityThread$H. handleMessage(ActivityThread.java:1147)03-26 12:35:16.900: E/AndroidRunE/AndroidRuntime(30127): atandroid.app.ActivityThread.main(ActivityThread.java:4429)03-26 12:35:16.900: E/AndroidRuntime(30127): atjava.lang.reflect.Method.invokeNative(Native Method)03-26 12:35:16.900: E/AndroidRuntime(30127): atjava.lang.reflect.Method.invoke(Method.java:511)03-26 12:35:16.900: E/AndroidRuntime(30127): atcom.android.internal.os.ZygoteInit$MESTodAndArgsCaller.run(ZygoteInit.java:795)03-26 12:35:16.900: E/AndroidRuntime(30127): atcom.android.internal.os.ZygoteInit.main(ZygoteInit. java: 562)03-26 12:35:16.900: E/AndroidRuntime(30127): at dalvik. system. NativeStart. main(Native Method)03-26 12:35:16.900: E/AndroidRuntime(30127):由: android. os. NetworkOnMainHttpConnection$Addres. connect(HttpConnection. java: 351)03-26 12:35:16.900: E/AndroidRuntime(30127): at libcore. net. http. HttpConnectionPool. get(HttpConnectionPool. java: 86)03-26 12:35:16.900: E/AndroidRuntime(30127): at libcore. net. http. HttpConnec. connect(HttpConnec. java: 128)03-26 12:35:16.900: E/AndroidRuntime(30127): at libcore. net. http. HttpEngine. openSocketConnection(HttpEngine. java: 312)03-26 12:35:16.900: E/AndroidRuntime(30127): at libcore. net. http. HttpEngine. connect(HttpEngineering. java: 307)03-26 12:35:16.900: E/AndroidRuntime(30127): at libcoreHttpURLConnectionInpli. getInputStream(HttpURLConnectionInpli. java: 168)03-26 12:35:16.900: E/AndroidRuntime(30127): at java. net. URL. openStream(URL. java: 462)03-26 12:35:16.900: E/AndroidRuntime(30127): at nl. appon. artistone. reneevanginkel. Biografie. onCreate(Biografie. java: 30)03-26 12:35:16.900: E/AndroidRuntime(30127): at android. app. active. performCreate(Active. java: 4465)03-26 12:35:16.900: E/AndroidRuntime(30127): at android. app. Instrumentation. call ActivityOnCreate(Instrumentation. java: 1049)03-26 12:35:16.900: E/AndroidRuntime(30127): at android. app

我该怎么做才能将来自web的文本放入TextView?这是一个PHP脚本,有一个传记输出。

谢谢你!

共有3个答案

后焕
2023-03-14

在onPostExecute中,您可以在TextView中设置文本。
我重用了Saad Khokhar的HitServerGET函数

此代码可以放在onCreate中。

final URL url = new URL("http://xxx.nl/api/biografie.php?dataid=998");
new AsyncTask<String, String, String>()
{
  String text=null;         
  @Override
  protected String doInBackground(String... params)
  {
    text = HitServerGET(url)
  }

  @Override
  protected void onPostExecute(String ret)
  {
    ((TextView)findViewById(R.id.biografieText)).setText(text);
  }
}.execute();
燕砚文
2023-03-14

使用此代码,您将获得此方法调用的响应,然后您可以在text View上设置它

公共静态字符串HitServerGET(字符串URL){

    String result = null;

    InputStream is = null;

    StringBuilder sb = null;

    // http post
    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(URL);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection" + e.toString());
    }

    // convert response to string
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        sb = new StringBuilder();
        sb.append(reader.readLine() + "\n");
        String line = "0";

        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

        is.close();
        result = sb.toString();

    } catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
    }
    return result;
轩辕啸
2023-03-14

这将是一个更好的实践,使用异步任务

AsyncronousTask atask = new AsyncronousTask();          
atask.execute("ur url here");
String res=atask.get();


//Asyncronous taks class goes like

public class AsyncronousTask extends AsyncTask<String, Void, String> {
String response;
Activity c;
//private ProgressDialog dialog;
//String title,msg;


@Override
protected String doInBackground(String... urls) {
    response = "";
    for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();

        HttpGet httpGet = new HttpGet(url);
        try {
            HttpResponse execute = client.execute(httpGet);
            InputStream content = execute.getEntity().getContent();
            BufferedReader buffer = new BufferedReader( new InputStreamReader(content));
            String s = "";
            while ((s = buffer.readLine()) != null) {
                response += s;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return response;
}

}
 类似资料:
  • 总结问题 你好,开发人员,所以。。我想做一个弹出菜单,点击下面的图标,它就会出现在列表视图中的一个项目上。我想这样做,点击出现一个带有一些选项的弹出栏 描述一下你的尝试 我试着按照有关创建弹出式菜单的教程进行操作,但方法总是一样的,我对此没有问题。但它在Logcat上显示了这个空指针错误,我试图用初始化ImageView来修复它,但目前没有任何进展。。例如,我尝试执行“image=(Imagevi

  • 我有一个Spring引导应用程序运行与Spring执行器启用。我正在使用Spring执行器健康endpoint作为准备和活泼检查。所有的工作都很好与一个副本。当我扩展到2个副本时,两个吊舱都崩溃了。它们都失败了就绪状态检查,并最终在无休止的破坏/重新创建循环中结束。如果我将它们缩放到1个副本,集群将恢复,并且Spring Boot应用程序可用。你知道是什么导致了这个问题吗? 下面是部署配置(Spr

  • 因此,我的应用程序不断崩溃,我正在开发一个聊天应用程序,当我运行该应用程序并尝试访问profile选项卡时,logcat会崩溃。 当它运行的应用程序它的罚款,但只要我点击配置文件选项卡它崩溃它是罚款在第一,但一旦我添加更多的代码到配置文件活动它不断崩溃,但我需要的代码或它的变种 我是android studio的新手,欢迎您的帮助。 非常感谢。 这是logcat错误: 以下是简介活动:

  • 我在Android开发者网站上开始构建你的第一个应用程序。我在文件中得到以下错误。 JAVAlang.RuntimeException:无法启动activity ComponentInfo{com.example.amir.myapplication/com.example.amir.myapplication.DisplayMessageActivity}:java。lang.NullPoint

  • 经过几天的计划,我刚刚开始为我的聊天应用程序编写一些代码,但问题是,在Gradle Build完成并将应用程序安装在我的设备上之后,它一直在崩溃。我创建了一个预计会打开新活动的按钮,但它没有这样做,而是崩溃了。在我编写任何代码之前,一切都正常,应用程序打开,logcat没有显示任何错误。以下是错误: 我试着遵循其他一些建议,但都不起作用。以下是我的代码片段: }