- 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/
我是 C 语言新手,我编写了这个 C 程序,让用户输入一年中的某一天,作为返回,程序将输出月份以及该月的哪一天。该程序运行良好,但我现在想简化该程序。我知道我需要一个循环,但我不知道如何去做。这是程序
我一直在努力找出我的代码有什么问题。这个想法是创建一个小的画图程序,并有红色、绿色、蓝色和清除按钮。我有我能想到的一切让它工作,但无法弄清楚代码有什么问题。程序打开,然后立即关闭。 import ja
我想安装screen,但是接下来我应该做什么? $ brew search screen imgur-screenshot screen
我有一个在服务器端工作的 UDP 套接字应用程序。为了测试服务器端,我编写了一个简单的 python 客户端程序,它发送消息“hello world how are you”。服务器随后应接收消息,将
我有一个 shell 脚本,它运行一个 Python 程序来预处理一些数据,然后运行一个 R 程序来执行一些长时间运行的任务。我正在学习使用 Docker 并且我一直在运行 FROM r-base:l
在 Linux 中。我有一个 c 程序,它读取一个 2048 字节的文本文件作为输入。我想从 Python 脚本启动 c 程序。我希望 Python 脚本将文本字符串作为参数传递给 c 程序,而不是将
前言 最近开始整理笔记里的库存草稿,本文是 23 年 5 月创建的了(因为中途转移到 onedrive,可能还不止) 网页调起电脑程序是经常用到的场景,比如百度网盘下载,加入 QQ 群之类的 我
对于一个类,我被要求编写一个 VHDL 程序,该程序接受两个整数输入 A 和 B,并用 A+B 替换 A,用 A-B 替换 B。我编写了以下程序和测试平台。它完成了实现和行为语法检查,但它不会模拟。尽
module Algorithm where import System.Random import Data.Maybe import Data.List type Atom = String ty
我想找到两个以上数字的最小公倍数 求给定N个数的最小公倍数的C++程序 最佳答案 int lcm(int a, int b) { return (a/gcd(a,b))*b; } 对于gcd,请查看
这个程序有错误。谁能解决这个问题? Error is :TempRecord already defines a member called 'this' with the same paramete
当我运行下面的程序时,我在 str1 和 str2 中得到了垃圾值。所以 #include #include #include using namespace std; int main() {
这是我的作业: 一对刚出生的兔子(一公一母)被放在田里。兔子在一个月大时可以交配,因此在第二个月的月底,每对兔子都会生出两对新兔子,然后死去。 注:在第0个月,有0对兔子。第 1 个月,有 1 对兔子
我编写了一个程序,通过对字母使用 switch 命令将十进制字符串转换为十六进制,但是如果我使用 char,该程序无法正常工作!没有 switch 我无法处理 9 以上的数字。我希望你能理解我,因为我
我是 C++ 新手(虽然我有一些 C 语言经验)和 MySQL,我正在尝试制作一个从 MySQL 读取数据库的程序,我一直在关注这个 tutorial但当我尝试“构建”解决方案时出现错误。 (我正在使
仍然是一个初学者,只是尝试使用 swift 中的一些基本函数。 有人能告诉我这段代码有什么问题吗? import UIKit var guessInt: Int var randomNum = arc
我正在用 C++11 编写一个函数,它采用 constant1 + constant2 形式的表达式并将它们折叠起来。 constant1 和 constant2 存储在 std::string 中,
我用 C++ 编写了这段代码,使用运算符重载对 2 个矩阵进行加法和乘法运算。当我执行代码时,它会在第 57 行和第 59 行产生错误,非法结构操作(两行都出现相同的错误)。请解释我的错误。提前致谢:
我是 C++ 的初学者,我想编写一个简单的程序来交换字符串中的两个字符。 例如;我们输入这个字符串:“EXAMPLE”,我们给它交换这两个字符:“E”和“A”,输出应该类似于“AXEMPLA”。 我在
我需要以下代码的帮助: 声明 3 个 double 类型变量,每个代表三角形的三个边中的一个。 提示用户为第一面输入一个值,然后 将用户的输入设置为您创建的代表三角形第一条边的变量。 将最后 2 个步
我是一名优秀的程序员,十分优秀!