Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为UI和后台任务编写代码的正确方法 如何正确管理android应用程序的代码?(用于任务/UI) 如何将用户界面与代码分离?(使用类或打包) 如何从后台线程/操作将项目添加到用户界面(正确方式)?例如,i 有桌面布局。如何正确地将行添加到该表布局? 为我的需要创建自定义对象(类),然后将项目添加到对象 然后在整个对象中循环并将项目添加到TableLayout? 是否将TableLayout作为参考传递 更好的方法是为数据收集创建单独的类或包? (连接到数据提供程序,获取数据,将其显示给用户)_Java_Android - Fatal编程技术网

Java 为UI和后台任务编写代码的正确方法 如何正确管理android应用程序的代码?(用于任务/UI) 如何将用户界面与代码分离?(使用类或打包) 如何从后台线程/操作将项目添加到用户界面(正确方式)?例如,i 有桌面布局。如何正确地将行添加到该表布局? 为我的需要创建自定义对象(类),然后将项目添加到对象 然后在整个对象中循环并将项目添加到TableLayout? 是否将TableLayout作为参考传递 更好的方法是为数据收集创建单独的类或包? (连接到数据提供程序,获取数据,将其显示给用户)

Java 为UI和后台任务编写代码的正确方法 如何正确管理android应用程序的代码?(用于任务/UI) 如何将用户界面与代码分离?(使用类或打包) 如何从后台线程/操作将项目添加到用户界面(正确方式)?例如,i 有桌面布局。如何正确地将行添加到该表布局? 为我的需要创建自定义对象(类),然后将项目添加到对象 然后在整个对象中循环并将项目添加到TableLayout? 是否将TableLayout作为参考传递 更好的方法是为数据收集创建单独的类或包? (连接到数据提供程序,获取数据,将其显示给用户),java,android,Java,Android,我四处搜索,找到了一些做背景任务的方法。 -首先是。是这样写的,AsyncTasks最好用于短操作(最多几秒钟)。 -我发现的第二个问题是。 -还有其他正确的方法来完成后台任务吗 Witch方法对于从WEB服务收集数据是正确的(可能有一些延迟和滞后)? 如果使用处理程序,那么如何将数据传递到UI线程?。在大多数情况下,我对第三个问题感兴趣 谢谢。设计Android应用程序的结构有很多方法。你的问题很笼统,所以我的回答也是 要构建项目,您可以使用MVC模式,该模式可以轻松地与Android一起使用

我四处搜索,找到了一些做背景任务的方法。
-首先是。是这样写的,
AsyncTasks最好用于短操作(最多几秒钟)。

-我发现的第二个问题是。
-还有其他正确的方法来完成后台任务吗

Witch方法对于从WEB服务收集数据是正确的(可能有一些延迟和滞后)? 如果使用
处理程序
,那么如何将数据传递到UI线程?。在大多数情况下,我对第三个问题感兴趣


谢谢。

设计
Android
应用程序的结构有很多方法。你的问题很笼统,所以我的回答也是

要构建项目,您可以使用
MVC
模式,该模式可以轻松地与
Android
一起使用:

  • 模型:主要保存数据,如列表、数组、字符串等
  • 控制器:处理模型数据,运行逻辑
  • 视图:用户界面,可以显示来自模型的数据和/或运行来自控制器的逻辑
这个问题,是用包还是用类分开,一般都不能回答。这两种方法在许多情况下都很有用。在我看来,以下简单示例的结构将非常有用:

  • [软件包]视图:
    • Activty1.java
    • Activty2.java
  • [套餐]型号:
    • Activty1DataModel.java
    • Activty2DataModel.java
  • [软件包]控制器:
    • Activty1Logic.java
    • Activty2Logic.java
较重的任务应该在Android上运行,而不是在UIThread上运行(例如,由于GUI冻结)。
AsyncTask
在新的独立线程中运行操作。
onPostExecute
方法在完成任务后执行,并在UI线程上运行,因此您可以从这里直接与视图交互

对于真正的长时间运行任务,您应该使用

当您想从另一个线程与UI交互时,必须在UI线程上显式运行操作,例如:

MainActivity.this.runOnUiThread(new Runnable() {
    public void run() {
       Log.d("UI thread", "I am the UI thread");
   }
});
与UI交互的另一种方式是使用
接口
/
监听器

要从web服务收集数据,可以将http客户端与
异步任务一起使用,但不能从UI线程运行网络操作(将导致异常)。这是一个例子

下次请在不同的帖子里问几个问题,而不是一个问题。

1)。问题不清楚。如果您的意思是这样的,您可以为每个类使用自己的
.java
文件

2) 。使用多个包

3) 。我认为从后台更新UI的最好方法是使用接口。下载图像的示例(使用
HttpClient
):

公共类AsyncImageSetter扩展AsyncTask{
专用onImageLoaderListener侦听器;
私有字符串msg,服务器;
公共异步ImageSetter(onImageLoaderListener侦听器){
this.listener=listener;
}
/*onImageLoaded回调将在UI线程上调用*/
ImageLoaderListener上的公共接口{
void onImageLoaded(位图bmp,字符串响应);
}
@凌驾
受保护位图doInBackground(字符串…参数){
HttpParams hparams=新的BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(10000);
HttpConnectionParams.setSoTimeout(10000);
服务器=参数[0];
HttpGet=新的HttpGet(服务器);
试一试{
DefaultHttpClient客户端=新的DefaultHttpClient(hparams));
HttpResponse响应=null;
/**如果需要的话,设置cookies*/
CookieStore store=client.getCookieStore();
HttpContext ctx=新的BasicHttpContext();
store.addCookie(您的SavedCookie对象);
setAttribute(ClientContext.COOKIE_STORE,STORE);
response=client.execute(get);
msg=response.getStatusLine().toString();
HttpEntity responseEntity=response.getEntity();
BufferedHttpEntity httpEntity=null;
试一试{
httpEntity=新的缓冲httpEntity(responseEntity);
}捕获(IOE1异常){
e1.printStackTrace();
}
InputStream imageStream=null;
试一试{
imageStream=httpEntity.getContent();
}捕获(IOE异常){
e、 printStackTrace();
}
返回BitmapFactory.decodeStream(imageStream);
}捕获(例外情况除外){
例如printStackTrace();
//错误处理
返回null;
}
}
/*如果后端设置了一些预定义的消息,请使用此方法/*
/*在我的情况下,这将是“警告”*/
私有无效检查响应(HttpResponse响应){
Header[]headers=response.getAllHeaders();
最终字符串target=“Warning”;
用于(标题h:标题){
if(h.getName().equalsIgnoreCase(目标)){
msg=h.getValue();
}否则{
继续;
}
}
}
@凌驾
受保护的void onPostExecute(位图结果){
super.onPostExecute(结果);
/*现在在UI线程上调用此回调*/
/*如果一切正常,您将得到一个图像和msg中的“HTTP200OK”*/
if(侦听器!=null){
onImageLoaded(结果,消息);
}
}
}
您需要传递一个新的onImageLoaderListener public class AsyncImageSetter extends AsyncTask<String, Void, Bitmap> { private onImageLoaderListener listener; private String msg, server; public AsyncImageSetter(onImageLoaderListener listener) { this.listener = listener; } /* the onImageLoaded callback will be invoked on UI thread */ public interface onImageLoaderListener { void onImageLoaded(Bitmap bmp, String response); } @Override protected Bitmap doInBackground(String... params) { HttpParams hparams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(10000); HttpConnectionParams.setSoTimeout(10000); server = params[0]; HttpGet get = new HttpGet(server); try { DefaultHttpClient client = new DefaultHttpClient(hparams)); HttpResponse response = null; /** set cookies if you need it */ CookieStore store = client.getCookieStore(); HttpContext ctx = new BasicHttpContext(); store.addCookie(yourSavedCookieObject); ctx.setAttribute(ClientContext.COOKIE_STORE, store); response = client.execute(get); msg = response.getStatusLine().toString(); HttpEntity responseEntity = response.getEntity(); BufferedHttpEntity httpEntity = null; try { httpEntity = new BufferedHttpEntity(responseEntity); } catch (IOException e1) { e1.printStackTrace(); } InputStream imageStream = null; try { imageStream = httpEntity.getContent(); } catch (IOException e) { e.printStackTrace(); } return BitmapFactory.decodeStream(imageStream); } catch (Exception ex) { ex.printStackTrace(); //error handling return null; } } /* use this method if your backend sets some pre-defined messages. /* /* In my case that would be "Warning */ private void checkResponse(HttpResponse response) { Header[] headers = response.getAllHeaders(); final String target = "Warning"; for (Header h : headers) { if (h.getName().equalsIgnoreCase(target)) { msg = h.getValue(); } else { continue; } } } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); /* now this callback is invoked on UI thread */ /* if everything went without errors, you'll get an image and "HTTP 200 OK" in msg */ if (listener != null) { listener.onImageLoaded(result, msg); } } }