0
  1. 在我的活动中,我有一个 AsyncTask,我在其中覆盖了 doInBackGround。

  2. 在同一个活动中,我有一个相机意图打开相机并允许用户拍照

问题是当我调用相机意图时,它会触发我覆盖的 doInBackGround 方法。这最终给了我一个SingleClientConnManager例外,要求我在再次分配客户端之前释放它。

这是我的活动代码:

public class UserProfileActivity extends Activity {

//many instance fiels here
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.user_profile);

        new LongOperation().execute("");

        userImage = (ImageView) findViewById(R.id.profileImage);
        userName = (TextView) findViewById(R.id.userName_profile);
        userLocation = (TextView) findViewById(R.id.userLocation_profile);
        editInfo = (TextView) findViewById(R.id.edit_profile);
        changeImage = (TextView) findViewById(R.id.changeImage_profile);
        userScore = (TextView) findViewById(R.id.userScore_profile);
        friendsLabel = (TextView) findViewById(R.id.userFriends_profile);


            changeImage.setOnClickListener(new View.OnClickListener() {

                public void onClick(View arg0) {
                    Intent cameraIntent = new Intent(
                            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);
//Point 1
                }
            });
//Point 2
    }
    private class LongOperation extends AsyncTask<String, Void, String> {

        private InputStream is;
        private StringBuilder sb;
        private String result;
        private ProgressDialog dialog = new ProgressDialog(context);

        @Override
        protected String doInBackground(String... params) {

//Point 3
            try {
                HttpResponse response;

                    HttpPost httppost = new HttpPost(
                            "http://www.xxxxx.com/yyyy/zzzz");
                    //httpclient is global to maintain sessions
                    response = SignUpActivity.httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();

                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) {
                    Log.e("error in reading input stream", e.toString());
                }
                try {
                    JSONObject jObj = new JSONObject(result);
                    String status = jObj.getString("status");
                    score = jObj.getInt("credits");
                    level = jObj.getInt("level");
                    image = jObj.getString("image");
                    fname = jObj.getString("fname");
                    lname = jObj.getString("lname");
                    city = jObj.getString("city");
                    email = jObj.getString("email");
                    clickedUserId = jObj.getInt("user_id");

                    JSONArray friendsJsonArray = jObj.getJSONArray("friends");
                    size = friendsJsonArray.length();

                    ArrayList<String> friendsNames = new ArrayList<String>();
                    friendsIds = new int[size];
                    for (int i = 0; i < size; i++) {

                        friendsNames.add(friendsJsonArray.getJSONObject(i)
                                .getString("name"));
                        friendsIds[i] = friendsJsonArray.getJSONObject(i)
                                .getInt("user_id");
                    }
                    adapter = new ArrayAdapter<String>(context,
                            R.layout.simple_listview_item, friendsNames);
                } catch (Exception e) {

                    Log.d("error in creating json object", e.toString());
                }
            } catch (Exception e) {
//Point 5
                Log.e("error main try", "Error in http connection" + e.toString());
            }
            return "Executed";
        }
        @Override
        protected void onPostExecute(String result) {

            friendsList.setAdapter(adapter);
            userScore.setText(score + " points" + "   level " + level);
            userName.setText(fname + "  " + lname);
            userLocation.setText(city);
            changeImage.setText("Change image");
            editInfo.setText("Edit");
            friendsLabel.setText("Friends");
            Bitmap bitmap = null;
            try {
                bitmap = BitmapFactory
                        .decodeStream((InputStream) new URL(image).getContent());
                userImage.setImageBitmap(bitmap);
            } catch (MalformedURLException e1) {

                e1.printStackTrace();
                userImage.setImageResource(R.drawable.xxx);
            } catch (IOException e2) {

                e2.printStackTrace();
                userImage.setImageResource(R.drawable.xxx);
            }

            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }

        @Override
        protected void onPreExecute() {

            this.dialog.setMessage("Please wait");
            this.dialog.show();
        }

        @Override
        protected void onProgressUpdate(Void... values) {

        }
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

//Point 4
        if (resultCode == RESULT_OK) {
            if (data != null) {

                photo = (Bitmap) data.getExtras().get("data");
                userImage.setImageBitmap(photo);

            }else{

                Intent intent = new Intent(UserProfileActivity.this,
                        UserProfileActivity.class);
                startActivity(intent);
            }
        } else {

            Intent intent = new Intent(UserProfileActivity.this,
                    UserProfileActivity.class);
            startActivity(intent);
        }
    }
}

在代码中的第 1、2、3、4、5 点给出了单击changeImageTextView 后的代码流序列。

请帮助我解决这种情况。

谢谢你。

4

1 回答 1

0

如果我是正确的,问题是因为当您打开相机时您的设备方向发生了变化。这会再次调用您的活动的 onCreate() 方法,请将此行插入到您的活动中这会导致问题

 <activity
            android:name="your activity" android:configChanges="keyboardHidden|orientation"
          />
于 2012-08-14T11:59:19.990 回答