我想在块模式下实现Http Request连接。在 JavaScript 中,我使用 XMLHttpRequest 与 onreadystatechange 回调。
Java Android中的等价物是什么?
答案 0 :(得分:1)
因此,如果您的意思是要进行异步请求,请查看Async Task或更简单的库Volley以进行异步请求
答案 1 :(得分:1)
我认为等效的是HttpURLConnection
实例,在发布内容时,您可以在其上调用setChunkedStreamingMode()
以启用块模式。您需要在后台线程上执行请求,然后使用AsyncTask
将结果发回主线程。
答案 2 :(得分:1)
Android中的所有网络工作必须在不是UI线程的线程上完成。要对此进行归档,开发人员通常会使用Thread和AsyncTask类。
为了进行http调用,Android使用HttpUrlConnection作为基础,像OkHttp这样的好库在它们的核心中使用它们。 Android团队还建议使用HttpUrlConnection进行联网。 检查此链接以获取有关该声明的一些信息
http://android-developers.blogspot.com.es/2011/09/androids-http-clients.html
在这里,你有一个完整的工作图像下载任务,基于HttpUrlConnection和AsyncTask
public class ImageDownloaderTask extends AsyncTask<String, Void, Bitmap> {
private final static String TAG = ImageDownloaderTask.class.getSimpleName();
@SuppressWarnings("rawtypes")
private final WeakReference imageViewReference;
private static Context mContext;
private static Integer mPlaceholder;
@SuppressWarnings({ "unchecked", "rawtypes" })
public ImageDownloaderTask(Context context, ImageView imageView, Integer placeholder) {
imageViewReference = new WeakReference(imageView);
mContext = context;
mPlaceholder = placeholder;
}
@Override
// Actual download method, run in the task thread
protected Bitmap doInBackground(String... params) {
return downloadBitmap(params[0]);
}
@Override
// Once the image is downloaded, associates it to the imageView
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}
if (imageViewReference != null) {
ImageView imageView = (ImageView) imageViewReference.get();
if (imageView != null) {
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
imageView.setImageDrawable(imageView.getContext().getResources().getDrawable(mPlaceholder));
}
}
}
}
private Bitmap downloadBitmap(String url) {
Bitmap bmp =null;
try{
URL ulrn = new URL(url);
HttpURLConnection con = (HttpURLConnection)ulrn.openConnection();
InputStream is = con.getInputStream();
bmp = BitmapFactory.decodeStream(is);
if (null != bmp)
return bmp;
}catch(Exception e){}
return bmp;
}
}
您可以像这样使用此类
new ImageDownloaderTask(getActivity().getApplicationContext(), myImageView, R.drawable.placeholder_drawable).execute("http://mydomain.com/myImage.png");
希望这有助于您澄清有关如何在Android中使用HttpUrlConnection和Threads的想法。