如何使用 Android Studio 中的 Java 在应用程序后台执行 HttpURLConnection 等任务?
How to do tasks like HttpURLConnection in the background of a app using Java in Android Studio?
我基本上是在学习 Android Studio 教程,该教程使用 AsyncTask class 来执行 HttpURLConnection 等后台任务。但问题是它造成了很多错误,后来我发现 class 已被弃用。那么有什么选择呢?
(如果可以,请提供示例代码)
代码:
public class MainActivity extends AppCompatActivity {
public class DownloadingTask extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... urls)
{
String result="";
HttpURLConnection urlConnection=null;
URL url;
try{
url=new URL(urls[0]);
urlConnection=(HttpURLConnection)url.openConnection();
InputStream in;
in = urlConnection.getInputStream();
InputStreamReader reader=new InputStreamReader(in);
int data=reader.read();
while (data!=-1)
{
char current=(char) data;
result = result + current;
data=reader.read();
}
return result;
}
catch (Exception e)
{
e.printStackTrace();
return "Failed";
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadingTask task= new DownloadingTask();
String s=null;
try {
s = task.execute("http://www.android.com/").get();
}
catch (Exception e)
{
e.printStackTrace();
}
Log.i("Msg",s);
}
}
这是一个演示如何使用 AsynkTask 下载图像的示例。
private class DownLoadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView imageView;
DownLoadImageTask(ImageView imageView) {
this.imageView = imageView;
}
protected Bitmap doInBackground(String... urls) {
String urlOfImage = urls[0];
Bitmap logo = null;
try {
InputStream is = new URL(urlOfImage).openStream();
logo = BitmapFactory.decodeStream(is);
} catch (Exception e) { // Catch the download exception
Log.v("download", e.getMessage());
}
return logo;
}
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
}
这是运行的方法
new DownLoadImageTask(img).execute(imageUrl);
任何更新都在此方法 onPostExecute 中完成,因为它 运行s 在 UI 线程上。
是的,你是对的。 AsynkTask 已弃用。您可以使用 LoderManager 和 Java Executor
或者 Volley,Retrofit 库
要下载图片,您可以使用 Picasso 和 Gilde Libraries。
我基本上是在学习 Android Studio 教程,该教程使用 AsyncTask class 来执行 HttpURLConnection 等后台任务。但问题是它造成了很多错误,后来我发现 class 已被弃用。那么有什么选择呢? (如果可以,请提供示例代码)
代码:
public class MainActivity extends AppCompatActivity {
public class DownloadingTask extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... urls)
{
String result="";
HttpURLConnection urlConnection=null;
URL url;
try{
url=new URL(urls[0]);
urlConnection=(HttpURLConnection)url.openConnection();
InputStream in;
in = urlConnection.getInputStream();
InputStreamReader reader=new InputStreamReader(in);
int data=reader.read();
while (data!=-1)
{
char current=(char) data;
result = result + current;
data=reader.read();
}
return result;
}
catch (Exception e)
{
e.printStackTrace();
return "Failed";
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadingTask task= new DownloadingTask();
String s=null;
try {
s = task.execute("http://www.android.com/").get();
}
catch (Exception e)
{
e.printStackTrace();
}
Log.i("Msg",s);
}
}
这是一个演示如何使用 AsynkTask 下载图像的示例。
private class DownLoadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView imageView;
DownLoadImageTask(ImageView imageView) {
this.imageView = imageView;
}
protected Bitmap doInBackground(String... urls) {
String urlOfImage = urls[0];
Bitmap logo = null;
try {
InputStream is = new URL(urlOfImage).openStream();
logo = BitmapFactory.decodeStream(is);
} catch (Exception e) { // Catch the download exception
Log.v("download", e.getMessage());
}
return logo;
}
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
}
这是运行的方法
new DownLoadImageTask(img).execute(imageUrl);
任何更新都在此方法 onPostExecute 中完成,因为它 运行s 在 UI 线程上。
是的,你是对的。 AsynkTask 已弃用。您可以使用 LoderManager 和 Java Executor 或者 Volley,Retrofit 库
要下载图片,您可以使用 Picasso 和 Gilde Libraries。