package bwie.caipu; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import com.google.gson.Gson; import java.io.IOException; import java.util.List; import Util.OkHttpUtils; import bean.Bean; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class MainActivity extends AppCompatActivity { private String time; private ArrayAdapter<Bean.TngouBean> adapter; private EditText ed; private GridView lv; private Button btn; private List<Bean.TngouBean> list; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { String str = (String) msg.obj; Gson gson = new Gson(); Bean be = gson.fromJson(str, Bean.class); list = be.getTngou(); adapter = new ArrayAdapter<Bean.TngouBean>(MainActivity.this, android.R.layout.simple_list_item_1, list); lv.setAdapter(adapter); super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed = (EditText) findViewById(R.id.et); lv = (GridView) findViewById(R.id.listView); btn = (Button) findViewById(R.id.but); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = new Intent(MainActivity.this, Activitysec.class); intent.putExtra("id", list.get(i - 1).getId()); startActivity(intent); } }); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String name = ed.getText().toString(); for (Bean.TngouBean li : list) { if (name.equals(li.getName())) { Intent intent = new Intent(MainActivity.this, Activitysec.class); intent.putExtra("id", li.getId()); startActivity(intent); } } } }); getEnqueue(); } private void getEnqueue() { OkHttpUtils.get("http://www.tngou.net/api/cook/classify", new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { final String result = response.body().string(); Message msg = Message.obtain(); msg.obj = result; handler.sendMessage(msg); } }); } }
Glide.with(context) .load("http://tnfs.tngou.net/image" + tn.getImg()) .placeholder(R.mipmap.ic_launcher) .into(vh.imageView);
相关推荐
本教程将通过一个具体的“异步联网、解析JSON、下载保存并用ListView+Glide开源库显示图片列表demo”来详细讲解这些关键知识点。 首先,我们要理解**异步联网**的概念。在Android开发中,由于主线程不能执行耗时...
6. **异步处理**:由于网络请求和JSON解析是在主线程中执行的,会阻塞用户界面,因此通常我们会使用AsyncTask或者Handler/Looper机制来处理这些耗时操作。这样可以保证UI的流畅性,避免出现ANR(Application Not ...
对于更复杂的后台任务管理,可以考虑使用IntentService、Handler或LiveData等。 总之,ListView加载网络数据涉及网络请求、数据解析、异步处理等多个环节,合理的架构设计和选择合适的工具能提高应用的性能和用户...
因此,通常我们会使用AsyncTask、Handler、IntentService或者现代的LiveData和Coroutines等异步处理机制来解决这个问题。 接着,远程解析JSON数据涉及网络请求。Android提供了多种网络库,如HttpURLConnection、...
1. **多线程加载数据**:在Android中,我们可以使用AsyncTask、Handler、Thread、ThreadPool等来实现后台线程加载。推荐使用异步任务(AsyncTask),它简化了线程管理和UI更新。创建一个AsyncTask子类,重写`...
在案例中,开发者可能使用了`AsyncTask`或`Handler`来处理异步任务,以便在后台线程获取数据,避免阻塞主线程。 2. **JSON解析**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和...
可以使用AsyncTask、Handler、Thread或更现代的库如Volley、OkHttp、Retrofit等实现异步加载。AsyncTask是一个轻量级的并发框架,适合处理短时间的后台任务。在onPreExecute()方法中启动加载,在doInBackground()...
2. 在`doInBackground`方法中,使用`HttpURLConnection`或`OkHttp`等网络库进行文件下载,并在下载过程中定期调用`publishProgress`更新进度。 3. 实现`onProgressUpdate`方法,将接收到的下载进度更新到ListView。...
Android提供了AsyncTask、Handler、Loader等多种异步处理机制,或者可以使用现代的协程(Coroutines)。 6. 自定义Adapter: 自定义Adapter需要继承自BaseAdapter或ArrayAdapter,并重写其中的方法,如`getView()`...
在Android开发中,"网络下载图片并显示到ListView"是一个常见的需求,特别是在构建内容丰富的应用时,如新闻阅读器或社交应用。这个过程涉及到多个关键知识点,包括网络请求、图片处理、UI性能优化以及异步操作。 ...
使用Handler、AsyncTask或Runnable配合Thread,或者使用上述提到的网络请求库的异步加载功能。 6. **图片质量与尺寸调整** - 为了减少内存消耗和加载时间,可以根据ListView item的实际大小动态调整图片的加载尺寸...
在Android中,为了防止UI线程被阻塞,网络请求和数据处理通常在后台线程执行,然后通过Handler或AsyncTask等机制更新UI。异步加载能确保用户界面的流畅性,即使在网络操作正在进行时也能保持应用的响应性。 2. **...
可以使用AsyncTask或者其他异步处理框架如Handler、Loader或Retrofit+Glide等库。 3. **图片缩放**:根据ListView item的大小预先计算出合适的图片尺寸,只加载和显示必要的像素。可以使用BitmapFactory的...
6. **线程安全**:由于数据加载在后台线程,而更新UI需在主线程,因此需要使用`runOnUiThread()`或`Handler`来确保UI操作的线程安全。 7. **数据绑定**:在`getView()`方法内,将解析出的JSON数据绑定到ListView的...
在“Handler异步加载图片 GridView 上拉刷新 下拉刷新”这个主题中,我们将深入探讨如何利用Handler实现图片的异步加载,以及如何在GridView和其他控件如ListView、ScrollView中集成上拉刷新和下拉刷新功能。...
在Android开发中,ListView是展示大量数据的常用组件,它能有效地进行滚动优化,节省内存。对于初学者来说,理解并实现ListView的异步加载网络图片以及动态更新是非常重要的技能。这个主题通常涵盖以下几个关键知识...
2. **启动加载更多数据的线程**:在判断到用户滚动到底部后,启动一个新的线程,如AsyncTask或Handler,来执行获取新数据的任务。这一步要确保不在主线程中进行,以避免阻塞UI。 3. **异步加载数据**:在后台线程中...
当数据加载完成,再通过Handler或runOnUiThread更新UI。 8. **ListView的优化**: - 使用ViewHolder设计模式提高ListView的滚动性能。 - 实现ListView的空视图,当没有数据时展示提示信息。 - 考虑使用...
可以使用AsyncTask、Handler/Looper机制,或者使用现代的RxJava/RxAndroid结合Retrofit库进行响应式编程。 4. **数据解析**:获取到服务器数据后,需要将其解析成Java对象。对于JSON,Gson库允许我们将JSON字符串...
通常,我们会创建一个Thread或者使用Handler和Looper配合,将网络请求的结果发送回主线程更新UI。然而,这种方式需要手动管理线程生命周期,相对复杂。 接下来是AsyncTask,它是Android提供的一种轻量级的异步执行...