Java 下载大量数据时无响应的应用程序
我有一个应用程序,必须在应用程序启动时从服务器下载几MB(1MB-10MB)的数据 问题在于该应用程序:Java 下载大量数据时无响应的应用程序,java,android,oncreate,Java,Android,Oncreate,我有一个应用程序,必须在应用程序启动时从服务器下载几MB(1MB-10MB)的数据 问题在于该应用程序: 开始下载前不显示主TextView(屏幕保持黑色) 他或多或少没有反应 代码如下: public class Main extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
- 开始下载前不显示主
(屏幕保持黑色)TextView
- 他或多或少没有反应
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DoIt();
}
private void DoIt() {
HttpClient httpClient = new DefaultHttpClient();
TextView tv = (TextView)findViewById(R.id.textView);
tv.setText("Starting app...");
try {
for (int i=1; i<100; i++) {
HttpPost request2 = new HttpPost("http://192.168.1.12:3000/bytes/data" + i);
HttpResponse response2 = httpClient.execute(request2);
// Do something with data. In some cases, it has to download 1MB data
}
}
// catch + finally ...
}
}
public类主扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DoIt();
}
私有无效DoIt(){
HttpClient HttpClient=新的DefaultHttpClient();
TextView tv=(TextView)findViewById(R.id.TextView);
tv.setText(“启动应用程序…”);
试试{
对于(inti=1;i您的应用程序变得不负责任,因为您正在下载主线程中的文件,您应该像这样使用后台线程
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView)findViewById(R.id.textView);
tv.setText("Starting app...");
new Thread(new Runnable() {
@Override
public void run() {
DoIt();
}
}).start();
}
private void DoIt() {
HttpClient httpClient = new DefaultHttpClient();
try {
for (int i=1; i<100; i++) {
HttpPost request2 = new HttpPost("http://192.168.1.12:3000/bytes/data" + i);
HttpResponse response2 = httpClient.execute(request2);
// Do something with data. In some cases, it has to download 1MB data
}
}
// catch + finally ...
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv=(TextView)findViewById(R.id.TextView);
tv.setText(“启动应用程序…”);
新线程(newrunnable()){
@凌驾
公开募捐{
DoIt();
}
}).start();
}
私有无效DoIt(){
HttpClient HttpClient=新的DefaultHttpClient();
试试{
对于(int i=1;iYou应该使用一个后台线程来进行网络操作。@codeMagic可以,但是stlil,为什么不tv.setText(“启动应用程序…””);
显示?(它应该在下载开始之前显示)。按照@codeMagic所说的做,你就可以设置文本。你可以用AsynTask轻松地完成它。tv.setText(“正在启动应用程序…”;
没有显示,因为在你陷入主线程困境之前,用户界面还没有机会更新。@克里斯蒂安,有没有代码示例说明你将如何操作?谢谢!我看到它开始了,我看到文本视图中有文本,然后我很快得到不幸的是,应用程序停止了
。知道吗?我在中看到了数千行ogcat
,是否有办法只显示我的(崩溃)应用程序?你必须看到导致停止的异常,阅读你将找到的日志和异常名称,如果你点击它,你还会找到行号。问题是,adb logcat
实时生成大量行,我看不到相关行。有没有办法过滤与特定行相关的消息ic应用程序(可能这在AndroidStudio中是直接可能的,但我不使用它)您只需仔细阅读日志并检测错误,这是唯一的解决方案