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();