相机意图和异步任务的doInBackground冲突

时间:2012-08-14 11:37:55

标签: android android-asynctask android-camera-intent

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

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

  3. 问题是当我调用相机意图它触发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在我点击changeImage TextView后给出了代码流的序列。

    请帮我解决这个问题。

    谢谢。

1 个答案:

答案 0 :(得分:0)

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

 <activity
            android:name="your activity" android:configChanges="keyboardHidden|orientation"
          />
相关问题