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