Android后台运行的问题

wangpangziwc 2011-08-19 07:18:17
我用socket上传数据到服务器,为了防止上传时间过长,所以将这一部分放在后台处理,但是onPostExecute已经运行了,也就是说doInBackground函数已经运行完毕,但是上传却没有成功,将上传代码放在Activity中操作,文件成功上传,这是为什么呢?

如果像调试后台程序,应该如何进行啊?
后台运行代码如下:

package lmx.graduate;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class uploadAsyncTask extends AsyncTask<String, Integer, String>{

public uploadAsyncTask(TextView textView)
{
this.textView = textView;
}
protected String doInBackground(String...param){

int i = 0;
for(i=1;i<=10000;i++)
publishProgress(i);
String path = getSDPath() +"/upload.txt";
try{
FileInputStream fileIS = new FileInputStream(path);
BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS,"utf-8"));
String readString = new String();
int k = 0;
while((readString = buf.readLine())!= null){
k++;
Log.v("error", readString);

//向服务器发送信息
Socket socket = null;
try{
socket = new Socket("192.168.11.17",54321);
//向服务器发送信息
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(readString);
System.out.println(readString);
//接受服务器的信息
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String mstr=br.readLine();
if(mstr!=null)
{
System.out.println(mstr);
}else
{
System.out.println("数据错误");
}
System.out.println("shangchuan");
out.close();
br.close();
socket.close();
}
catch (Exception e) {
// TODO: handle exception
}
}
fileIS.close();
} catch (FileNotFoundException e) {
e.printStackTrace();

} catch (IOException e){
e.printStackTrace();
}


return null;
}
//在doInBackground执行完毕后执行
protected void onPostExecute(String result)
{
textView.setText("本次上传已完成");
}
//在调用异步线程之后第一个执行,在主线程中进行
/**
*
* @param
* @return
* @author Administrator
*/
protected void onPreExecute()
{
textView.setText("开始上传");
}
protected void onProgressUpdate(Integer...values){
//textView.setText("请勿选择继续上传,请勿退出,系统正在上传,"+Integer.toString(values[0]));
textView.setText("请勿选择继续上传,请勿退出,系统正在上传");

}

public String getSDPath(){
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
if (sdCardExist)
{
sdDir = Environment.getExternalStorageDirectory();//获取跟目录
}
return sdDir.toString();

}

}
...全文
354 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
silent_shadow 2011-09-08
  • 打赏
  • 举报
回复
可以在doInBackground多加点日志,看看它是否正确执行了,有没有未捕获的异常
liumangxingwc 2011-08-19
  • 打赏
  • 举报
回复
帮你顶一下。
liumangxingwc 2011-08-19
  • 打赏
  • 举报
回复
如果有答案了,我也好好研究一下。
liumangxingwc 2011-08-19
  • 打赏
  • 举报
回复
我也搞不明白,帮你顶一个。
源码链接: https://pan.quark.cn/s/1889b1ebf6bc ### Linux环境下Vivado借助VCS进行仿真的操作指南 #### 一、前言 在数字电路系统设计领域中,FPGA(Field Programmable Gate Array,即现场可编程门阵列)的设计与验证占据着核心地位。伴随着设计复杂程度的增加,高效的仿真验证成为了保障设计正确性的关键环节之一。在Linux操作系统环境中运用Vivado来调用VCS执行仿真操作,不仅能够提升仿真的执行速度,同时也便于进行波形监测,从而大幅度增强设计验证的整体效率。本指南将详尽阐述如何在Linux系统平台上完成这一流程的操作。 #### 二、准备工作阶段 1. **软件部署**: - 验证Vivado软件是否已经正确安装。Vivado是由Xilinx公司开发的一款集成开发环境,专门用于FPGA的设计工作。 - 进行VCS软件的安装。VCS是一款性能卓越的仿真工具,广泛应用于Verilog和SystemVerilog语言代码的仿真测试。为了更好地支持混合语言环境下的仿真,建议采用VCS-MX版本。 2. **权限配置**: - Linux系统的权限管理机制较为严格,尤其是针对普通用户的权限限制较为严格。因此,在启动Vivado调用VCS仿真之前,必须确保所有必要的权限都已经正确配置。 3. **环境变量设定**: - 配置个人用户目录下的`.bashrc`文件,以便在终端操作时能够顺利加载所需的环境变量。 #### 三、调整个人用户下的.bashrc文件 1. **编辑.bashrc文件**: - 使用`cd`指令进入到个人用户的主目录,通过`ll -la`指令查看当前目录中的所有文件,...

80,488

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧