0

こんにちは私はボタンをクリックして画像をキャプチャしたいと思います。写真が撮影された後、画面に表示され、別のボタンをクリックしてその画像をサーバーに送信します。いろいろ試してみましたが、適切な解決策が見つかりませんでしたので、助けてください。

私はこれをAndroid2.3.3で開発しています

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
             Bitmap photo = (Bitmap) data.getExtras().get("data"); 
             imageView.setImageBitmap(photo);
             Intent intent= getIntent();
            System.out.println("image name=========================:: "+imageName);
            requestIntent.putExtra("imageName", imageName);
            startActivity(requestIntent);

        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }
    }
}

画像はその中に表示されてImageViewいませんが、に保存されていSdCardます。そして、別のインテントを呼び出してその画像を送信している間、エラーが表示されます。つまり11-01 12:00:15.085: E/log_tag(9205): Error in http connection android.os.NetworkOnMainThreadException 、そのインテントコードはです。

public class PreviewAndSendImage extends Activity{

@SuppressLint("SdCardPath")
public void onCreate(Bundle savedInstanceState) {       
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button send=(Button) findViewById(R.id.sendToServer);
    send.setEnabled(true);
    send.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Intent intent= getIntent();
            String name=intent.getStringExtra("imageName");
            System.out.println("image name :::::::::::::::: +" +name);
            Bitmap bitmapOrg = BitmapFactory.decodeFile("/sdcard/pictures/"+name);
            ByteArrayOutputStream bao = new ByteArrayOutputStream();
            bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);
            byte [] ba = bao.toByteArray();

            String ba1=Base64.encodeBytes(ba);
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("reqId", "40"));
            nameValuePairs.add(new BasicNameValuePair("image",ba1));    

            try{

                     HttpClient httpclient = new DefaultHttpClient();
                     HttpPost httppost = new HttpPost("http://192.168.0.115:8085/Dplus_EB/bill");
                     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                     HttpResponse response = httpclient.execute(httppost);
                    //HttpEntity entity = response.getEntity();
                    //is = entity.getContent();
                     BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                      String line = "";
                      while ((line = rd.readLine()) != null) {
                          System.out.println("success----------------------------");
                          Toast.makeText(PreviewAndSendImage.this, "Status: "+line, Toast.LENGTH_LONG).show();
                      }
            }catch(Exception e){

                    Log.e("log_tag", "Error in http connection "+e.toString());

            }

        }
    });

}
  }
4

2 に答える 2

6

以下の簡単な手順に従ってください。目的を簡単に達成できます。

ステップ 1 : アプリで、カメラから写真をキャプチャして SD カード ディレクトリに保存するクラスを作成します。このリンクを参照してください。このディスカッションディスカッションも参照してください。

ステップ 2 : Android FTP クライアントを作成します。このリンクを参照してください。

ステップ 3 : これで、changeDir、ファイルのアップロード、ファイルのダウンロードなど、FTP サーバーとさまざまなタイプの対話を行うことができます。このチュートリアルを参照してください。

シンプルですが、いくつかのドキュメントを読む必要があるという条件のみです。役立つと思われる場合は、私の回答を受け入れて投票してください。また、リンクが機能しない場合はコメントしてください。ありがとう。

于 2012-11-01T07:15:06.107 に答える
1

UIスレッドでhttp呼び出しを行うことはできません。少なくとも新しいOSではそうではありません。

このような呼び出しにはAsyncTaskの使用を検討してください。

于 2012-11-01T06:50:02.873 に答える