我想编写一个 android 应用程序来从服务器下载图像(jpg)和 json 对象。为此,我编写了两个异步任务来做到这一点。但是,当我同时调用这两个任务时,只有第一个被加载,第二个没有。谁能解释这个问题并给我一些帮助?
这是我的一段代码:
public class Catalog extends Activity {
private TextView text;
private ImageButton image;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_catalog);
// Intent intent = getIntent();
/*RelativeLayout m_vwJokeLayout=(RelativeLayout) this.findViewById(R.id.layout1);
LayoutParams lparams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
TextView tv=new TextView(this);
tv.setLayoutParams(lparams);
tv.setText("test");
m_vwJokeLayout.addView(tv);*/
image = (ImageButton) findViewById(R.id.imageButton1);
final String imageUrl="http://137.189.97.18/image/20000338902.jpg";
text = (TextView) findViewById(R.id.textView1);
Spinner s = (Spinner) findViewById(R.id.spinner1);
String[] showcata = getResources().getStringArray(R.array.CatalogSpinner);
ArrayAdapter <String> adapter = new ArrayAdapter <String>(this,android.R.layout.simple_spinner_item, showcata);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);
s.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
String selected = parentView.getSelectedItem().toString();
text.setText(selected);
//text.setBackgroundColor(getResources().getColor(R.color.Blue));
/*RelativeLayout m_vwJokeLayout=(RelativeLayout) Catalog.this.findViewById(R.id.layout1);
LayoutParams lparams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
TextView tv=new TextView(Catalog.this);
tv.setLayoutParams(lparams);
tv.setText(selected);
m_vwJokeLayout.addView(tv);*/
//AsyncTask myTask = new httpconnect(Catalog.this);
Catalog.httpconnect myTask = new httpconnect(Catalog.this);
myTask.execute("123");
Catalog.downloadimage download = new downloadimage(Catalog.this);
download.execute(imageUrl);
/*if(selected.equals("Pants"))
text.setText("RIGHT");*/
}
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
}
public static class httpconnect extends AsyncTask<String, Void, String>{
public Catalog myActivity;
public httpconnect(Catalog a)
{
myActivity = a;
}
protected void onPreExecute(){
//text.setText("load");
}
protected String doInBackground(String... x){
String result = null;
InputStream is = null;
StringBuilder sb=null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://137.189.97.18/main2.php");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("_method", "post"));
nameValuePairs.add(new BasicNameValuePair("catagory", x[0]));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.d("HTTP response error",e.toString());
}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line="0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
}
return result;
}
protected void onProgressUpdate(){
}
protected void onPostExecute(String z){
//text.setText(z);
Log.d("BAC", z);
myActivity.text.setText(z);
String product_id = null;
String colour_id = null;
String colour= null;
String picture= null;
JSONObject json_data;
try {
json_data = new JSONObject(z.trim());
product_id=json_data.getString("product_id");
colour_id=json_data.getString("price");
colour=json_data.getString("colour");
picture=json_data.getString("picture");
} catch (JSONException e) {
// TODO Auto-generated catch block
JSONArray jArray;
try {
jArray = new JSONArray(z.trim());
JSONObject json_data2=null;
for(int i=0;i<jArray.length();i++){
json_data2 = jArray.getJSONObject(i);
product_id=json_data2.getString("product_id");
colour_id=json_data2.getString("colour_id");
colour=json_data2.getString("colour");
picture=json_data2.getString("picture");
}
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//e.printStackTrace();
}
TextView text2 = (TextView) myActivity.findViewById(R.id.textView2);
myActivity.text.setText(product_id);
text2.setText(colour_id);
}
}
public static class downloadimage extends AsyncTask<String, Void, Bitmap>{
public Catalog myActivity;
public downloadimage(Catalog a)
{
myActivity = a;
}
protected void onPreExecute(){
//text.setText("load");
}
protected Bitmap doInBackground(String... x){
Bitmap bmImg = null;
URL myFileUrl =null;
try {
myFileUrl= new URL(x[0]);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
int length = conn.getContentLength();
int[] bitmapData =new int[length];
byte[] bitmapData2 =new byte[length];
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bmImg;
}
protected void onProgressUpdate(){
}
protected void onPostExecute(Bitmap z){
//text.setText(z);
//Log.d("image", z);
myActivity.image.setImageBitmap(z);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_catalog, menu);
return true;
}
}