我的活动使用线程工作正常,但是当有 10 个或更多图像要从 Web 服务器数据库中获取时,它需要很多时间。通过谷歌搜索,我看到 asynctask 是一个更好的选择,但我无法实现它。这是我的线程类
public class Ongoing extends Activity implements OnItemClickListener{
InputStream is;
ProgressDialog pd;
public int limit=0;
String F_NAME[]=new String[1000];
String F_ID[]=new String[1000];
String F_IMG[]=new String[1000];
String F_DESC[]=new String[1000];
String F_DOWN[]=new String[1000];
ListView lv1;
ArrayList<ItemDetails> image_details;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT>8)
{
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
setContentView(R.layout.submenu);
lv1 = (ListView) findViewById(R.id.listV_main);
lv1.setOnItemClickListener(this) ;
pd=new ProgressDialog(this);
pd.setTitle("Please wait");
pd.setMessage("Loading....");
pd.setCancelable(false);
pd.show();
new Thread(new Runnable()
{
@Override
public void run()
{
GetSearchResults();
// hanlder.sendEmptyMessage(1);
runOnUiThread(new Runnable() {
@Override
public void run() {
lv1 = (ListView) findViewById(R.id.listV_main);
adb=new ItemListBaseAdapter(Ongoing.this, results);
lv1.setAdapter(adb);
pd.cancel();
}
});
}
}).start();
}
ItemListBaseAdapter adb;
private ArrayList<ItemDetails> results = new ArrayList<ItemDetails>();
private ArrayList<ItemDetails> GetSearchResults()
{
try{
String result = "";
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(D.url+"abc.php");
//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection success ");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso- 88591"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
try{
JSONArray jArray = new JSONArray(result);
int arrayLength=jArray.length();
limit=arrayLength;
for(int i=0;i<arrayLength;i++){
JSONObject json_data = jArray.getJSONObject(i);
F_NAME[i]=json_data.getString("F_NAME");
F_DESC[i]=json_data.getString("F_DESC");
F_ID[i]="ongopro"+json_data.getString("F_ID");
F_IMG[i]=json_data.getString("F_IMG");
F_DOWN[i]=json_data.getString("F_DOWNLOAD");
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
for(int j=0;j<limit;++j)
{
ItemDetails item_details = new ItemDetails();
item_details.setName(F_NAME[j]);
item_details.setItemDescription(F_DESC[j]);
item_details.setImgUrl(F_IMG[j]);
item_details.setLoc(F_DOWN[j]);
results.add(item_details);
}
}
catch(Exception e){
Log.e("log_tag", "no msg sent "+e.toString());
hanlder.sendEmptyMessage(2);
}
return results;
}
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
data.proj=F_DOWN[position];
data.table=F_ID[position];
data.flatname=F_NAME[position];
Intent newActivity = new Intent(view.getContext(),homescreen.class);
startActivity(newActivity);
}}
下面是 asynctask 中的代码(但它不起作用,请编辑它)
public class Ongoing extends Activity implements OnItemClickListener{
InputStream is;
ProgressDialog pd;
public int limit=0;
String F_NAME[]=new String[1000];
String F_ID[]=new String[1000];
String F_IMG[]=new String[1000];
String F_DESC[]=new String[1000];
String F_DOWN[]=new String[1000];
ListView lv1;
ArrayList<ItemDetails> image_details;
ItemListBaseAdapter adb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT>8)
{
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
setContentView(R.layout.submenu);
lv1 = (ListView) findViewById(R.id.listV_main);
lv1.setOnItemClickListener(this) ;
pd=new ProgressDialog(this);
pd.setTitle("Please wait");
pd.setMessage("Loading....");
pd.setCancelable(false);
pd.show();
load task=new load();
task.execute();
}
public class load extends AsyncTask<Void, Void , ArrayList<ItemDetails>>
{
public ArrayList<ItemDetails> results = new ArrayList<ItemDetails>();
@Override
protected ArrayList<ItemDetails> doInBackground(Void... params) {
String result = "";
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(D.url+"abc.php");
//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection success ");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
//parse json data
try{
JSONArray jArray = new JSONArray(result);
int arrayLength=jArray.length();
limit=arrayLength;
for(int i=0;i<arrayLength;i++){
JSONObject json_data = jArray.getJSONObject(i);
F_NAME[i]=json_data.getString("F_NAME");
F_DESC[i]=json_data.getString("F_DESC");
F_ID[i]="ongopro"+json_data.getString("F_ID");
F_IMG[i]=json_data.getString("F_IMG")+"";
F_DOWN[i]=json_data.getString("F_DOWNLOAD");
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
for(int j=0;j<limit;++j)
{
ItemDetails item_details = new ItemDetails();
item_details.setName(F_NAME[j]);
item_details.setItemDescription(F_DESC[j]);
item_details.setImgUrl(F_IMG[j]);
item_details.setLoc(F_DOWN[j]);
results.add(item_details);
}
}
catch(Exception e){
Log.e("log_tag", "no msg sent "+e.toString());
hanlder.sendEmptyMessage(2);
return results;
}
protected void onPostExecute() {
adb=new ItemListBaseAdapter(Ongoing.this, results);
lv1.setAdapter(adb);
pd.dismiss();
}
@Override
protected void onPreExecute() {
}}
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
data.proj=F_DOWN[position];
data.table=F_ID[position];
data.flatname=F_NAME[position];
Intent newActivity = new Intent(view.getContext(),homescreen.class);
startActivity(newActivity);
}}