gpt4 book ai didi

java - 建立 URL 连接会使我的应用程序崩溃

转载 作者:行者123 更新时间:2023-12-02 05:14:07 28 4
gpt4 key购买 nike

我有一个安卓 Activity在 URL 上发出 HTTP GET 请求时会崩溃 http://developernetwork.net78.net/readUnivs.php

应用程序只需向服务器发出 HTTP GET 请求,该请求将以纯文本形式返回教育大学列表,以 \n 分隔。特点。然后将该列表设置为 android.widget.Spinner 中的列表数据。在android.widget.ArrayAdapter的帮助下。

这是我在服务器上的 PHP 代码

<?php
$conn = mysqli_connect($url, $username, $passwd, $database_name);

$result = mysqli_query($conn, "SELECT University FROM Universities");

while($row = mysqli_fetch_array())
print($row["University"]."\n");

print("END");

mysqli_close($conn);
?>

这是我的 Android Activity :

package com.adi.test;

import android.os.Bundle;
import android.app.Activity;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import java.util.ArrayList;
import java.util.Scanner;
import java.net.URL;
import java.net.HttpURLConnection;


public class TestActivity extends Activity {

@Override
public void onCreate(Bundle bundle) {

super.onCreate(bundle);

LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

try {
URL url = new URL("http://developernetwork.net78.net/readUnivs.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent", "Mozilla/5.0");
Scanner sc = new Scanner(conn.getInputStream());

ArrayList<String> list = new ArrayList<String>();
while(sc.hasNextLine()) {

String line = sc.nextLine();
if(!line.equals("END"))
list.add(line);
}
sc.close();
} catch(IOException exception) {

}

Spinner spinner = new Spinner(this);
spinner.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);
layout.addView(spinner);
setContentView(layout);
}
}

该应用程序在我的 LG L90 上编译并安装得很好。但一打开就闪退。为什么会发生这种情况?如果我添加一个简单的循环(将数字从 0 递增到 10)来代替读取服务器响应的循环,则应用程序可以正常运行。我认为循环有一些问题。有人可以指出问题可能是什么吗?

最佳答案

自 Honeycomb (3.0) 起,您无法在 UIThread 中发出网络请求。考虑使用 AsyncTask 并在 doInBackground 中发出请求。

然后在 onPostExecute 中的 UIThread 中进行更改。

这是一个示例:http://programmerguru.com/android-tutorial/android-asynctask-example/

关于java - 建立 URL 连接会使我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27124570/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com