Java 音频录制和发布到服务器

Java 音频录制和发布到服务器,java,android,Java,Android,首先,我是一个Android新手。我有一个android应用程序,它将音频录制12秒到一个原始文件,然后我使用lame将其转换为最终文件“mezzo.mp3”。然后应用程序应将文件上载到服务器。然而,代码似乎从未执行到上传部分。这是我的密码 MainActivity.java class UploadFileTask extends AsyncTask<Void, Void, String> { @Override protected String d

首先,我是一个Android新手。我有一个android应用程序,它将音频录制12秒到一个原始文件,然后我使用lame将其转换为最终文件“mezzo.mp3”。然后应用程序应将文件上载到服务器。然而,代码似乎从未执行到上传部分。这是我的密码

MainActivity.java

class UploadFileTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            String responseString = "";
            try {
                String url = "http://178.62.209.46:8000/api/tag/";
                File track = new File(Environment.getExternalStorageDirectory(), "mezzo.mp3");
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);
                MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create();
                reqEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                //InputStream inputStream = new ;
                reqEntity.addBinaryBody("track", track);
                final HttpEntity myEntity = reqEntity.build();
                httppost.setEntity(myEntity);
                HttpResponse response = httpclient.execute(httppost);
                //process response
                responseString = new BasicResponseHandler().handleResponse(response);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            catch (ClientProtocolException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return responseString;
        }
        protected void onPostExecute(String responseString){
            Toast.makeText(getApplicationContext(), responseString, Toast.LENGTH_LONG).show();
        }
    }
计时器正常运行,“自动停止录制”土司显示。然而,它似乎是
newuploadfiletask().execute()从不运行


我犯了什么错误???

你发布了很多代码。你应该只发布相关代码。在onClick中,这就足够了

您有一个
NetworkOnMainThreadException
。这也将在LogCat中清晰可见。您必须将“internet代码”放入异步任务或线程中


更新:嗯。。。也许我很快就和他谈过了。老实说,我不知道“onFinish”中的代码是否在主线程上执行。但如果祝酒词通过,它就是。请在LogCat中查找真正的错误。

在安装onclicklistener时,您正在启动asynctask。因此,即使在用户单击之前。你应该在录音结束后启动它。将该行直接放在吐司之后,告知录音已停止。

您的日志显示了什么?您的清单中是否有internet权限?另外,代码从不执行是什么意思?哪个部分停止工作?
Toast.makeText(getApplicationContext(),“自动停止录制”,Toast.LENGTH_LONG.show()。你看到那片吐司了吗`烤面包在12秒后显示,这是不够的。我想还会有更多的东西要看。如果这个吐司通过了,你将拥有主线程上的网络。您已经知道接下来要做什么。我更新了代码以使用AsyncTask…但是,它似乎无法执行。请从doInBackground中删除Toast。你不能在那里敬酒。改为使用Log.d()语句。您可以在onPostExecute中使用Toast来表示结束。我认为AsyncTask没有返回,因为每次我重新启动进程时,它都返回上一个结果。如何确保返回?Asynctasks不返回结果。你到底是什么意思?
Button startButton = (Button) findViewById(R.id.StartButton);
        startButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mRecMicToMp3.start();
                CountDownTimer countDowntimer = new CountDownTimer(12000, 1000) {
                    public void onTick(long millisUntilFinished) {
                    }

                    public void onFinish() {
                        mRecMicToMp3.stop();
                        Toast.makeText(getApplicationContext(), "Stopped recording Automatically ", Toast.LENGTH_LONG).show();

                    }};countDowntimer.start();

            }
        });
        new UploadFileTask().execute();