Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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 如何使用单独的AsyncTask类连接internet_Java_Android_Android Asynctask - Fatal编程技术网

Java 如何使用单独的AsyncTask类连接internet

Java 如何使用单独的AsyncTask类连接internet,java,android,android-asynctask,Java,Android,Android Asynctask,我有三个类:MainActivity,Temp(扩展AsyncTask)和HttpHandler 我正在尝试调用main活动中的Temp。在Temp中,它将调用HttpHandler从URL获取JSON,最后将其返回到MainActivity。 但它无法从URL获取任何信息 我在网上搜索过这个问题,有人说是关于UI线程的,但我不明白为什么 另外,是否还有其他方法可以在单独的类中建立连接?因为我有几个活动需要连接到internet,我不想在所有其他活动中将扩展的AsyncTask类复制并粘贴为私有

我有三个类:
MainActivity
Temp
(扩展
AsyncTask
)和
HttpHandler

我正在尝试调用
main活动中的
Temp
。在
Temp
中,它将调用
HttpHandler
从URL获取JSON,最后将其返回到
MainActivity
。 但它无法从URL获取任何信息

我在网上搜索过这个问题,有人说是关于UI线程的,但我不明白为什么


另外,是否还有其他方法可以在单独的类中建立连接?因为我有几个活动需要连接到internet,我不想在所有其他活动中将扩展的
AsyncTask
类复制并粘贴为私有类。

Android不允许某些任务在主线程中运行,例如http请求,这将减慢主应用程序的速度。您必须在后台使用单独的线程来执行此类工作

AsyncTask和AsyncTaskLoader是实现此任务的良好选择。 [ [

如果您的工作可能需要很长时间,并且在某些情况下不希望内存泄漏,请使用AsyncTaskLoader

作为起点,我想向您介绍以下信息:

在你的主要活动中,实现这一点

implements LoaderManager.LoaderCallbacks<List<Your Data Type To Fetch>>
注意:1是装载机标识号,您可以使用不同的编号

注意:对于具有url和get方法的http请求:

HttpURLConnection urlConnection = null;
    try {
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setReadTimeout(10000 /* milliseconds */);
        urlConnection.setConnectTimeout(15000 /* milliseconds */);
        urlConnection.setRequestMethod("GET");
        urlConnection.connect();

不只是描述代码想要做什么,顺便说一下,对于带有url的http请求,也可以发布代码;我添加了一个示例代码:
public class SampleLoader extends AsyncTaskLoader<List<YourDataType>>
public List<YourDataType> loadInBackground() 
protected void onStartLoading()
getLoaderManager().initLoader(1, null, this);
HttpURLConnection urlConnection = null;
    try {
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setReadTimeout(10000 /* milliseconds */);
        urlConnection.setConnectTimeout(15000 /* milliseconds */);
        urlConnection.setRequestMethod("GET");
        urlConnection.connect();