我正在研究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
答案 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);
}
}
我希望这会有所帮助。请注意,我没有测试它,因为我离编码计算机很远!