2012-08-14 62 views
0
  1. 在我的活动中我有一个AsyncTask,其中我已覆盖doInBackGround。相机意图和异步任务的doInBackground冲突

  2. 在相同的活性我有一个照相机意图打开照相机,并允许用户在当我呼叫摄像机意图它是触发doInBackground方法我推翻采取PIC

问题是。这最终给我一个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的。

请帮我解决这个情况。

谢谢。

回答

0

如果我是正确的问题,是因为你的设备取向得到改变,当你打开camera.That调用您的活动的onCreate()方法再次 请插入此行到你的活动中menifest,是造成问题

<activity 
      android:name="your activity" android:configChanges="keyboardHidden|orientation" 
      /> 
+0

没有。我相信它不是因为方向的改变。我在使用我的应用程序时不改变方向。此外,我已经在所有活动中编写了这些代码。在搜索了一整天的解决方案之后,我发现这是因为相机意图调用了doInBackground方法。到目前为止,我从来没有在同一个活动中使用过异步任务和相机意图调用。如果你想要的话,你可以通过类似于这个的我的这个问题。 http://stackoverflow.com/questions/11865001/will-onactivityresult-restart-my-activity – 2012-08-14 12:13:15