Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 建立URL连接会使我的应用程序崩溃_Java_Php_Android_Http Get - Fatal编程技术网

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

Java 建立URL连接会使我的应用程序崩溃,java,php,android,http-get,Java,Php,Android,Http Get,我有一个安卓活动,在URL上发出HTTP GET请求时崩溃 . 应用程序只需向服务器发出HTTP GET请求,服务器将返回一个教育大学列表,该列表以纯文本形式由\n字符分隔。然后在android.widget.ArrayAdapter的帮助下,将该列表设置为android.widget.Spinner中的列表数据 这里是我在服务器上的PHP代码 <?php $conn = mysqli_connect($url, $username, $passwd, $database_na

我有一个安卓
活动
,在URL上发出HTTP GET请求时崩溃 .

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

这里是我在服务器上的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活动:

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);
    }   
 }
package com.adi.test;
导入android.os.Bundle;
导入android.app.Activity;
导入android.widget.Spinner;
导入android.widget.ArrayAdapter;
导入android.widget.LinearLayout;
导入android.widget.LinearLayout.LayoutParams;
导入java.util.ArrayList;
导入java.util.Scanner;
导入java.net.URL;
导入java.net.HttpURLConnection;
公共类测试活动扩展了活动{
@凌驾
创建公共void(Bundle){
super.onCreate(bundle);
LinearLayout布局=新的LinearLayout(本);
布局。设置方向(线性布局。垂直);
layout.setLayoutParams(新的LayoutParams(LayoutParams.FILL_父级,LayoutParams.FILL_父级));
试试{
URL=新URL(“http://developernetwork.net78.net/readUnivs.php");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“GET”);
conn.setRequestProperty(“用户代理”、“Mozilla/5.0”);
Scanner sc=新扫描仪(conn.getInputStream());
ArrayList=新建ArrayList();
while(sc.hasNextLine()){
字符串行=sc.nextLine();
如果(!line.equals(“END”))
列表。添加(行);
}
sc.close();
}捕获(IOException异常){
}
微调器微调器=新微调器(此);
spinner.setLayoutParams(新的LayoutParams(LayoutParams.FILL\u父级,LayoutParams.WRAP\u内容));
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u微调器项目,列表);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);
layout.addView(微调器);
setContentView(布局);
}   
}

该应用程序在我的LG L90上编译和安装良好。但它一打开就崩溃了。为什么会这样?如果我添加一个简单的循环,将数字从0增加到10,以代替读取服务器响应的循环,那么应用程序运行良好。我认为这个循环有一些问题。有人能指出问题所在吗?

您正在从主线程访问Url。因此,将发生android.os.NetworkOnMainThreadException。它会使你的应用程序崩溃。在AsynTask上执行网络操作。

由于蜂巢(3.0)无法在UIThread中发出网络请求。 考虑使用<代码> AycCastase<代码>,并在<代码> doI背景< /代码>中做出请求。< /P> 然后在
onPostExecute
中对UIThread进行更改


这里有一个示例:

您能给我一个示例代码吗?因为我还必须更新微调器。也就是说,在UI中进行更改。这是我猜不允许的线程除了主线程在android。请参考这个链接。检查这里:你能给我一个示例代码吗?因为我还必须更新微调器。也就是说,在UI中进行更改。这是我猜不允许的线程除了主线程在安卓。检查我编辑的答案。现在去吃午饭,祝你好运!