- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Android 开发的新手,我正在尝试创建一个应用程序来显示用于验证的 list 列表。
由于我是新手,所以我按照“面向 .NET 开发人员的 OData 编程指南”一书中的示例开发了该应用程序的原型(prototype)。我已经测试了书中(第 5 章)中的示例(它工作正常),但由于某种原因它崩溃了。
我怀疑这可能与我的 WCF OData 服务有关。它是在 Entity Framework 中开发的,托管在我的本地 PC 上,即 http:192.168.0.105:8090/PODDataService.svc。
根据本书的示例,我还创建了 2 个映射类,因为该应用仅与 2 个 OData 实体交互。
这是我用来构建项目的 6 个类:
package com.podcheck;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.core4j.Enumerable;
import org.odata4j.consumer.ODataConsumer;
import org.odata4j.core.OEntity;
import org.odata4j.core.OLink;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lvManifests = (ListView)findViewById(R.id.lvManifests);
// Add item click action listener
lvManifests.setOnItemClickListener(
new ManifestListItemClickListener(this)
);
// Populate category items on lstCategory
ArrayList<ManifestObj> manifestList = GetManifestItems();
ManifestsAdapter mAdapter = new ManifestsAdapter(this, R.layout.list_item, manifestList);
lvManifests.setAdapter(mAdapter);
}
// Query Category list from Northwind based WCF DataService
ArrayList<ManifestObj> GetManifestItems()
{
String svcUri = "http://192.168.0.105:8090/PODDataService.svc/";
ODataConsumer c = ODataConsumer.create(svcUri);
ArrayList<ManifestObj> manifestList = new ArrayList<ManifestObj>();
Enumerable<OEntity> cursor = c.getEntities("Manifests").expand("ManifestItems").execute();
for (OEntity entityObj : cursor)
{
ManifestObj mObj = new ManifestObj();
mObj.ManifestID = entityObj.getProperty("ManifestID", Integer.class).getValue();
mObj.ManifestCode = entityObj.getProperty("ManifestCode", String.class).getValue();
mObj.ManifestDate = entityObj.getProperty("ManifestDate", Date.class).getValue();
Date date = new Date();
if(mObj.ManifestDate == date)
{
List<OEntity> entityList = entityObj.getLink("ManifestItems", OLink.class).getRelatedEntities();
mObj.ManifestItems = new ArrayList<ManifestItemObj>();
for(OEntity pEntity: entityList)
{
ManifestItemObj miObj = new ManifestItemObj();
miObj.JobType = pEntity.getProperty("JobType", String.class).getValue();
miObj.FKID = pEntity.getProperty("FKID", Integer.class).getValue();
//miObj.SupplierID = pEntity.getProperty("SupplierID", Integer.class).getValue();
//miObj.UnitPrice = pEntity.getProperty("UnitPrice", BigDecimal.class).getValue();
mObj.ManifestItems.add(miObj);
}
manifestList.add(mObj);
}
}
return manifestList;
}
public void ShowItemsOfManifest(ManifestObj manifest)
{
Bundle bundle = new Bundle();
Intent newIntent = new Intent(this.getApplicationContext(), SubActivity.class);
newIntent.putExtras(bundle);
newIntent.putExtra("Manifest", manifest);
this.startActivity(newIntent);
}
}
package com.podcheck;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class SubActivity extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sub);
ManifestObj mObj = (ManifestObj)this.getIntent().getSerializableExtra("Manifest");
TextView tv = (TextView)this.findViewById(R.id.tvContent);
StringBuffer sb = new StringBuffer();
sb.append("You have selected the following Category:");
sb.append("\nManifest: " + mObj.getManifestCode());
sb.append("\nManifest Raised On: " + mObj.getManifestDate());
sb.append("\nItems under this Manifest(" + mObj.ManifestItems.size() + "):");
sb.append("\n----------------------------------------------------------");
for(ManifestItemObj miObj: mObj.ManifestItems){
sb.append("\nJob:" + miObj.getJobType() + Integer.toString(miObj.getFKID()));
sb.append("\n\t");
}
tv.setText(sb.toString());
Button btn = (Button)this.findViewById(R.id.btnReturn);
btn.setOnClickListener(
this
);
}
public void onClick(View v) {
//this.finishActivity(0);
System.out.println("finish activity");
this.finish();
}
package com.podcheck;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ManifestsAdapter extends ArrayAdapter<ManifestObj> {
int resourceId = 0;
public ManifestsAdapter(Context context, int resource, ArrayList<ManifestObj> items) {
super(context, resource, items);
this.resourceId = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout itemRoot;
ManifestObj manifest;
manifest = this.getItem(position);
//Inflate the view
if(convertView==null)
{
itemRoot = new LinearLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater vi;
vi = (LayoutInflater)getContext().getSystemService(inflater);
vi.inflate(this.resourceId, itemRoot, true);
}
else
{
itemRoot = (LinearLayout) convertView;
}
TextView tvName =(TextView)itemRoot.findViewById(R.id.tvCategoryName);
tvName.setText(manifest.getManifestCode());
itemRoot.setTag(manifest);
return itemRoot;
}
}
package com.podcheck;
//import android.content.Intent;
//import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
public class ManifestListItemClickListener implements OnItemClickListener {
MainActivity _mainActivity;
public ManifestListItemClickListener(MainActivity ma){
_mainActivity = ma;
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
LinearLayout itemRoot = (LinearLayout)view;
ManifestObj mObj = (ManifestObj)itemRoot.getTag();
StringBuffer sb = new StringBuffer();
sb.append("You have selected the following Manifest:");
sb.append("\nID: " + mObj.getManifestID());
sb.append("\nName: " + mObj.getManifestCode());
sb.append("\nManifestDate: " + mObj.getManifestDate());
// new AlertDialog.Builder(parent.getContext())
// .setTitle("Manifest Selected")
// .setMessage(sb.toString())
// .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int which) {
// // do something else
//
// }
// })
// .show();
_mainActivity.ShowItemsOfManifest(mObj);
}
}
package com.podcheck;
import java.io.Serializable;
public class ManifestItemObj implements Serializable
{
int ManifestItemID;
int FKID;
String JobType;
public int getManifestItemsID()
{
return ManifestItemID;
}
public void setManifestItemID(int manifestItemID)
{
ManifestItemID = manifestItemID;
}
public int getFKID()
{
return FKID;
}
public void setFKID(int fkid)
{
FKID = fkid;
}
public String getJobType()
{
return JobType;
}
public void setJobType(String jobType)
{
JobType = jobType;
}
}
package com.podcheck;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import org.joda.time.DateTime;
public class ManifestObj implements Serializable{
int ManifestID;
String ManifestCode;
Date ManifestDate;
boolean Consolidated;
ArrayList<ManifestItemObj> ManifestItems;
public int getManifestID() {
return ManifestID;
}
public void setManifestID(int manifestID) {
ManifestID = manifestID;
}
public String getManifestCode() {
return ManifestCode;
}
public void setManifestCode(String manifestCode) {
ManifestCode = manifestCode;
}
public Date getManifestDate() {
return ManifestDate;
}
public void setManifestDate(Date manifestDate) {
ManifestDate = manifestDate;
}
public boolean getConsolidated() {
return Consolidated;
}
public void setConsolidated(boolean consolidated) {
Consolidated = consolidated;
}
public ArrayList<ManifestItemObj> ManifestItems()
{
return ManifestItems;
}
public void setManifestItems(ArrayList<ManifestItemObj> manifestItems)
{
ManifestItems = manifestItems;
}
}
目前我认为它与我的 list 或 XML 文件没有任何关系。
我有点迷茫,因为几乎没有什么不同。我已无数次测试我的 WCF 数据服务。
它也可以是数据集大小吗?我在 SQL Server 数据库中的 list 表确实有接近 31000 条记录。
编辑:这是日志:-
'02-03 23:11:20.609: D/dalvikvm(617): GC_CONCURRENT freed 272K, 4% free 8197K/8519K, paused 33ms+5ms, total 79ms
02-03 23:11:20.609: D/dalvikvm(617): WAIT_FOR_CONCURRENT_GC blocked 32ms
02-03 23:11:20.769: D/AndroidRuntime(617): Shutting down VM
02-03 23:11:20.780: W/dalvikvm(617): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
02-03 23:11:20.809: E/AndroidRuntime(617): FATAL EXCEPTION: main
02-03 23:11:20.809: E/AndroidRuntime(617): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.podcheck/com.podcheck.MainActivity}: com.sun.jersey.api.client.ClientHandlerException: android.os.NetworkOnMainThreadException
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.os.Looper.loop(Looper.java:137)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.ActivityThread.main(ActivityThread.java:4745)
02-03 23:11:20.809: E/AndroidRuntime(617): at java.lang.reflect.Method.invokeNative(Native Method)
02-03 23:11:20.809: E/AndroidRuntime(617): at java.lang.reflect.Method.invoke(Method.java:511)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-03 23:11:20.809: E/AndroidRuntime(617): at dalvik.system.NativeStart.main(Native Method)
02-03 23:11:20.809: E/AndroidRuntime(617): Caused by: com.sun.jersey.api.client.ClientHandlerException: android.os.NetworkOnMainThreadException
02-03 23:11:20.809: E/AndroidRuntime(617): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:128)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.sun.jersey.api.client.Client.handle(Client.java:457)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.sun.jersey.api.client.WebResource.handle(WebResource.java:557)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:69)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.sun.jersey.api.client.WebResource$Builder.method(WebResource.java:539)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataClient.doRequest(ODataClient.java:214)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataClient.getMetadata(ODataClient.java:66)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataConsumer$CachedEdmDataServices.refreshDelegate(ODataConsumer.java:592)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataConsumer$CachedEdmDataServices.getDelegate(ODataConsumer.java:586)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.internal.EdmDataServicesDecorator.findEdmEntitySet(EdmDataServicesDecorator.java:46)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataConsumer$CachedEdmDataServices.findEdmEntitySet(ODataConsumer.java:598)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataConsumer.getFeedCustomizationMapping(ODataConsumer.java:559)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataConsumer.getEntities(ODataConsumer.java:313)
02-03 23:11:20.809: E/AndroidRuntime(617): at org.odata4j.consumer.ODataConsumer.getEntities(ODataConsumer.java:300)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.podcheck.MainActivity.GetManifestItems(MainActivity.java:46)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.podcheck.MainActivity.onCreate(MainActivity.java:33)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.Activity.performCreate(Activity.java:5008)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-03 23:11:20.809: E/AndroidRuntime(617): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
02-03 23:11:20.809: E/AndroidRuntime(617): ... 11 more
02-03 23:11:20.809: E/AndroidRuntime(617): Caused by: android.os.NetworkOnMainThreadException
02-03 23:11:20.809: E/AndroidRuntime(617): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.io.IoBridge.connect(IoBridge.java:112)
02-03 23:11:20.809: E/AndroidRuntime(617): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
02-03 23:11:20.809: E/AndroidRuntime(617): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
02-03 23:11:20.809: E/AndroidRuntime(617): at java.net.Socket.connect(Socket.java:842)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpConnection.connect(HttpConnection.java:117)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
02-03 23:11:20.809: E/AndroidRuntime(617): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:215)
02-03 23:11:20.809: E/AndroidRuntime(617): at com.sun.jersey.client.urlconnection.URLConnect
02-03 23:11:20.839: D/dalvikvm(617): GC_CONCURRENT freed 463K, 6% free 8261K/8775K, paused 25ms+6ms, total 91ms
02-03 23:11:20.839: D/dalvikvm(617): WAIT_FOR_CONCURRENT_GC blocked 14ms'
编辑:
我怀疑这是现在的问题:-
ODataConsumer c = ODataJerseyConsumer.create("http://192.168.0.105:8090/PODDataService.svc");
for (OEntity entityObj : c.getEntities("Manifests").expand("ManifestItems").execute())
{
//opcode
}
这意味着它没有读取 WCF 服务。对吧?
另一个编辑:相同的应用程序现在可以在 Android 2.3 中运行。 Android 4 与 2.3 有何不同?又一个谜团有待揭开。
最佳答案
如果这仍然是打开的并且正在阅读实际问题是在 android 4.0 中你不能在主线程上运行网络调用。它会在主线程错误上抛出一个网络,在 android 2.3 中你被允许这样做。这就是为什么一个有效而另一个无效的原因。您要做的是在异步任务中运行所有网络操作。查看下面的文档。
http://developer.android.com/reference/android/os/AsyncTask.html
关于java - 使用 OData WCF 的 Android 应用程序 - Android 应用程序不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14620668/
我在本地创建了一个 OData 应用程序。请求地址为“http://localhost:5182/odata/Users” [EnableQuery] public IHttpActionR
有可用的使用 WCF 数据服务(ADO.NET 数据服务)的 OData 服务。我需要以编程方式使用 OData 服务。从某种意义上说,我不想使用 DataSvcUtil 创建代理。相反,我需要在运行
这是设置:我有一个“学生”,他有一个相关的实体“类(class)”(一对多)。每个“类(class)”都有一个相关实体“期间”,其中包含类(class)的所有时间和日期详细信息。我想找回所有在 201
我想知道是否有或为什么没有用于 Java 的 ADO.NET 数据服务服务器库? 我需要从 Java 服务器公开数据库,但我只看到 Microsot 为 Java 提供客户端,而不是服务器部分。 当您
我正在使用 odata api,现在我在一个实体上有一个属性,它是一个选项,如下所示: 属性名称是:status值为:1、2、3名称:完成,进度,新 问题是当我使用 postman 获取元数据时,我得
处理文件流 GET、POST 和 DELETE 操作的推荐方法是什么。我得到了以下有关如何操作的链接,但它适用于 V3 版本。在将此解决方案移植到 OData V4 伊朗时,会产生一系列问题,这些问题
我对 Odata 主题很陌生,并尝试了解使用 OData 服务时的最佳实践方案是什么。 方案 1: 我有一个复杂的应用程序,其中包含来自远程 Odata 模型的多个 EntitySet,该模型是从 S
OData 被吹捧为 REST 样式数据服务的新开放标准,但我找不到太多证据表明它被任何未加入 MSFT 开发人员社区的人愤怒地使用。如果它是一个开放标准,我会期待 Java/Ruby/Python/
我正在创建分页并每页获取 10 条 JSON 记录: var coursemodel = query.Skip(skip).Take(take).ToList(); 我需要在网页上显示数据库中可用
我正在尝试使用此 URL 在 OData 中进行一些自定义排序 localhost:82/odata.svc/ComponentPresentations?$filter=TemplateId eq
给定一个已知的 OData 端点,确定 OData 服务版本的最佳方法是什么?此场景中的客户端可以支持任何版本(1-4),但我需要知道如何格式化请求。 例如,OData-Version为 V4 服务返
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我的应用程序的 Controller 大多调用一个数据源,没有任何问题。 但是,其中之一使用三个单独的数据源,有时在访问它们时会返回 403 Forbidden 错误。 "dataSources":
在我的职业生涯中,我已经使用过OData了很多,现在,来自不同团队的同事中很少有人建议我们使用JsonAPI和GraphQL,因为它与Microsoft无关。我对这两种查询语言都没有太多的经验。据我所
我正在尝试创建对 odata webservice 的调用,该调用将仅选择某些属性的不同值。有没有很好的例子说明如何做到这一点? 最佳答案 目前,OData 协议(protocol)不支持 disti
我必须对名称包含空格的字段进行 $filter 查询。例如,$filter=票号,例如“abc_123” 我开始认为这是不可能的。有人可以帮我解决这个问题吗? 谢谢。 最佳答案 我想分享这个,我试图通
我正在开发一个需要与 OData 服务(确切地说是 Microsoft Dynamics CRM)通信的应用程序。我有一个要求,我只需要知道实体具有哪些所有属性。 例如 [Organization U
我正在尝试访问 OData 源提供程序,特别是 SAP HANA 通过 Odata 服务公开的分析 View 。我正在 odata 上应用包含数字的过滤器,但收到一条错误消息,指出不支持使用该数字,因
我正在创建一个 SAPUI5 应用程序。此应用程序通过 OData 连接到后端 SAP 系统。在 SAPUI5 应用程序中,我使用了智能图表控件。开箱即用的智能图表允许用户为基础数据创建过滤器。这工作
我已使用 this generator 成功生成 OData 客户端代码访问我的 Dynamics CRM WebApi 服务。不幸的是,对于一个普通的组织,它生成了一个 ~30 MB 的 cs 文件
我是一名优秀的程序员,十分优秀!