4 android android-inflate android-asynctask
我正在创建一个应用程序,它将更新城市的天气详情.循环将是一个城市列表.所以我想要列表中的城市.我将使用AsyncTask方法发送请求和解析它.同时我正在给布局充气,我必须在布局中放置与城市相对应的所有天气细节.如何实现这一点请帮助我.
我正在膨胀的XML文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/depart_details"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/flight_depart_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:padding="3dip"
android:layout_marginTop="10dp"
android:src="@drawable/f1" />
<TextView
android:id="@+id/depart_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/flight_depart_image"
android:text=""
android:textColor="#666666"
android:textSize="25sp"
android:textStyle="bold" />
<TextView
android:id="@+id/depart_airport_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/depart_time"
android:text=""
android:textColor="#666666"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/depart_airport"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/depart_airport_city"
android:layout_marginLeft="125dp"
android:text="N/A"
android:textColor="#666666"
android:textSize="12sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/weather_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft ="40dp"
android:layout_toRightOf="@+id/depart_airport"
android:src="@drawable/image" />
<TextView
android:id="@+id/tempraturetext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_toRightOf="@+id/weather_image"
android:text="Temp:" />
<TextView
android:id="@+id/temprature"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_toRightOf="@+id/tempraturetext"
android:text="20?" />
<TextView
android:id="@+id/humidity_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/temprature"
android:layout_marginLeft="3dp"
android:layout_toRightOf="@+id/weather_image"
android:text="Humidity:" />
<TextView
android:id="@+id/humidity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/temprature"
android:layout_marginLeft="3dp"
android:layout_toRightOf="@+id/humidity_text"
android:text="32" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/depart_airport"
android:layout_marginTop="5dp"
android:background="#d3d3d3" >
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我创建的这个函数发送请求
private WeatherResponse requestWeatherUpdate(String location) {
url = "" + location; //This location will be dyanamic and multiple
Log.d("URL for Weather Upadate", url);
WeatherUpdate weatherReq = new WeatherUpdate(new CallBack() {
@Override
public void run(Object result) {
try {
AppResponse = (String) result;
response = ParseWeatherResponseXML
.parseMyTripXML(AppResponse);
} catch (Exception e) {
Log.e("TAG Exception Occured",
"Exception is " + e.getMessage());
}
}
});
weatherReq.execute(url);
return response;
}
Run Code Online (Sandbox Code Playgroud)
AsynkTask
public class WeatherUpdate extends AsyncTask<String, Void, String> {
Context context;
CallBack callBack;
public WeatherUpdate(CallBack callBack) {
this.callBack = callBack;
}
@Override
protected String doInBackground(String... arg0) {
String responseString = "";
HttpClient client = null;
try {
client = new DefaultHttpClient();
HttpGet get = new HttpGet(IweenTripDetails.url);
client.getParams().setParameter("http.socket.timeout", 6000);
client.getParams().setParameter("http.connection.timeout", 6000);
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null) {
responseString = EntityUtils.toString(resEntityGet);
Log.i("GET RESPONSE", responseString.trim());
}
} catch (Exception e) {
Log.d("ANDRO_ASYNC_ERROR", "Error is " + e.toString());
}
Log.d("ANDRO_ASYNC_RESPONSE", responseString.trim());
client.getConnectionManager().shutdown();
return responseString.trim();
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
callBack.run(result);
}
}
Run Code Online (Sandbox Code Playgroud)
而不是将AsynChronous任务保持在循环中,将循环保持在AsynChronous中.并用于onProgressUpdate更新UI.
更新了示例代码
public class Asyn extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
for (String location : params) {
String tmp = getTemp(location);
publishProgress(tmp); /** Use Result **/
}
return null;
}
/**
* Calculate Weather
*
* @param location
* @return
*/
private String getTemp(String location) {
return location;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
Log.e("Temo", values[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
并传递您开始处理的位置数组
Asyn m = new Asyn();
String arrryaLocation = null; // your vales
m.execute(arrryaLocation);
Run Code Online (Sandbox Code Playgroud)
Asynctask 中有 4 个方法,在 doInBackground() 方法中进行 HTTP 调用和解析数据,该方法用于执行后台进程,在 onPostExecute 方法中膨胀布局,该方法用于执行 UI 操作。
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
//Make your HTTP call and parse data
return null;
}
Run Code Online (Sandbox Code Playgroud)
和UI交互
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
// Inflate layout here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14897 次 |
| 最近记录: |