网络请求返回null - Android

时间:2015-08-31 16:55:51

标签: java android networking null httpurlconnection

我正在研究android中的网络通信项目,但我的应用无法正常工作!经过一些调试后,我发现每个网络请求都有一个来自系统的空响应。

我尝试了很多方法,例如: 1)硬重启我的手机 2)将所有网络权限添加到清单文件

var target = UIATarget.localTarget();
target.pushTimeout(4);
target.popTimeout();

var window=target.frontMostApp().mainWindow()
var appScroll=window.scrollViews()[0];
appScroll.logElementTree();
UIATarget.localTarget().delay(2);
appScroll.buttons()[1].tap();

3)使用本地网络(我的手机作为服务器) 4)让所有应用程序连接到网络:设置>网络应用> ...

但是!什么都没发生......

这是我类似的问题链接,但在这个主题中没有答案: can't connect to internet in ONLY in my android app. Each method to connect internet returns null

网络正在我的手机上运行,​​因为有些应用程序(如电报和Chrome)运行良好!

这里有一个有趣的事情,当我复制并将这段代码复制到简单的java项目而不是android项目时,它运行良好!

因为我想知道问题出在哪里,我只需要将3行简单的代码复制到简单的android项目中,但仍然没有发生任何事情!

清单文件:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

布局文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.dltests"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

源文件

<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"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:id="@+id/hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

结果是: 错误:null

1 个答案:

答案 0 :(得分:0)

Android禁止您在UI线程中进行网络连接。你需要做什么产生一个单独的线程来为你做网络。然后,您需要一个接收器或处理程序来发布/更新带有数据的UI。

1 - 创建一个新类:

       public async Task<Client> GetClient()
        {
            return await _clientRepository.GetAll().Where(x => x.Id == 1).FirstOrDefaultAsync();
        }

        public Task<Client> GetClient2()
        {
            return Task.FromResult(_clientRepository.GetAll().Where(x => x.Id == 1).FirstOrDefault());
        }

public async Task Run()
{
        var result = await GetClient();
        var result2 = await GetClient2();
}

2 - 在活动中创建处理程序,以便可以更新UI以及启动工作线程

import android.os.Handler;
import android.os.Message;

public class GetData extends Thread
{

    // Holds url that data is stored on
    private URL url

    // Sets the url value
    public GetData(URL newUrl)
    {
         url = newUrl;
    }

    // Runs when the thread is launched
    public void run()
    {
        // Opens connection
        HttpURLConnection con = (HttpURLConnection) url.openConnection();

        // Sends back to UI using a Message
        Message msg = MainActivity.MainActivityInterface.obtainMessage(MainActivity.getAndUpdate);
        msg.obj = con.getContentLength(); // Adds the data
        HomeScreen.homeScreenInterface.sendMessage(msg); 
    }
}

我希望这会有所帮助。请注意,我没有测试它,因为我离编码计算机很远!