我有一個同步邏輯使得從android到db的sendOrder通過在doInBackgroud()
上運行的web服務來運行。DoInBackground不能第二次工作
首先我啓動應用程序。 然後點擊SyncClick
和It同步數據庫沒有錯誤。 之後,我進入應用程序添加someorder到orderTable 返回到主屏幕(其中有SyncClick),我再次點擊SyncClick。 它發送命令(意思是sendOrder()
功能正常) 之後,重置數據庫並獲得最新的數據在doInBackgroud()
。 但它得到這個錯誤;
07-11 23:38:15.406: E/AndroidRuntime(7864): java.lang.RuntimeException: An error occured while executing doInBackground()
07-11 23:38:15.406: E/AndroidRuntime(7864): Caused by: java.lang.NullPointerException
後,我開始應用並點擊SyncClick再次效果很好。所以它不工作後,我添加了一些命令,然後同步,但沒有任何添加任何順序很好。
尋找問題。 感謝您的時間提前。
public void SyncClick(View v)
{
Loading = (ImageView)findViewById(R.id.imgLoadingAnim);
LoadingLayout = (LinearLayout)findViewById(R.id.loLoadingAnim);
LoadingLayout.setVisibility(VISIBLE);
Loading.setBackgroundResource(R.drawable.loading);
frameAnimation= (AnimationDrawable)Loading.getBackground();
frameAnimation.setCallback(Loading);
frameAnimation.setVisible(true, true);
frameAnimation.start();
if(!this.dhn.isTableExists("Orders"))
{
updateDB();
}
sendOrder();
}
public void sendOrder()
{
ArrayList<Object[]> argumentsList = new ArrayList<Object[]>();
Object[] stuff = {this.dhn, this};
//SEND
ArrayList<Order> orders = this.dhn.GetOrders();
for(int i = 0 ; i < orders.size(); i++)
{
ArrayList<OrderItem> orderItems = this.dhn.GetOrderItems(orders.get(i).ID);
String orderItemsS = "";
for(int r = 0 ; r < orderItems.size(); r++)
{
orderItemsS = orderItemsS + orderItems.get(r).FinalCode + "|" + orderItems.get(r).Quantity + "|" +
orderItems.get(r).Price + "|" + orderItems.get(r).Discount + "|" + orderItems.get(r).Status + "|" + "#";
}
orderItemsS = orderItemsS.substring(0, orderItemsS.length() - 1);
Object[] arguments = {
new String("OrderAdd"),
stuff,
new String("UserId"),
new Integer (orders.get(i).UserId),
new String("int"),
new String("CustomerId"),
new Integer (orders.get(i).CustomerId),
new String("int"),
new String("Price"),
new Double (orders.get(i).Price),
new String("double"),
new String("Discount"),
new Double (orders.get(i).Discount),
new String("double"),
new String("Status"),
new Integer (orders.get(i).Status),
new String("int"),
new String("orderItems"),
new String (orderItemsS),
new String("String")
};
argumentsList.add(arguments);
}
Object[] stuffALL = {this.dhn, this, argumentsList};
Object[] argumentsALL = {
new String("recieveALL"),
stuffALL
};
//ConnectXML runXMLALL = new ConnectXML();
new ConnectXML().execute(argumentsALL);
Status = 1;
updateDB();
receive();
}
public void receive()
{
Object[] stuff = {this.dhn, this};
ArrayList<Object[]> argumentsList1 = new ArrayList<Object[]>();
//receive
Object[] arguments = {
new String("ProductListGet"),
stuff,
new String("CatID"),
new Integer (-1),
new String("int")
};
argumentsList1.add(arguments);
Object[] arguments1 = {
new String("CustomerListGet"),
stuff
};
argumentsList1.add(arguments1);
Object[] arguments2 = {
new String("CategoryListGet"),
stuff,
new String("ParentID"),
new Integer (-2),
new String("int")
};
argumentsList1.add(arguments2);
Object[] arguments3 = {
new String("UserListGet"),
stuff
};
argumentsList1.add(arguments3);
Object[] arguments5 = {
new String("ProductCategoriesListGet"),
stuff
};
argumentsList1.add(arguments5);
Object[] arguments6 = {
new String("ProductOptionListGet"),
stuff
};
argumentsList1.add(arguments6);
Object[] arguments7 = {
new String("FinalProductListGet"),
stuff
};
argumentsList1.add(arguments7);
Object[] arguments8 = {
new String("ProductDiscountsListGet"),
stuff
};
argumentsList1.add(arguments8);
Object[] arguments9 = {
new String("ProductPriceGroupListGet"),
stuff
};
argumentsList1.add(arguments9);
Object[] arguments10 = {
new String("OptionListGet"),
stuff
};
argumentsList1.add(arguments10);
Object[] stuffALL1 = {this.dhn, this, argumentsList1};
Object[] argumentsALL1 = {
new String("recieveALL"),
stuffALL1
};
//ConnectXML runXMLALL1 = new ConnectXML();
new ConnectXML().execute(argumentsALL1);
}
int Stat;
int Status;
public void LoadAnim()
{
if(Status == 1)
{
Stat++;
if(Stat > 0)
{
LoadingLayout.setVisibility(GONE);
if(frameAnimation !=null && frameAnimation.isRunning())
{
frameAnimation.stop();
Stat = 0;
Status = 0;
}
}
}
}
public void updateDB()
{
this.dhn.close();
try {
InputStream myInput;
myInput = getAssets().open("sistem.db");
// Path to the just created empty db
String outFileName = "/data/data/sistem.ss/databases/"
+ "sistem.db";
// Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
buffer = null;
outFileName = null;
this.dhn.close();
this.dhn = null;
this.dhn = DataHelper.getDataHelper(this);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
logcat的
07-12 07:31:59.879: E/AndroidRuntime(2873): FATAL EXCEPTION: AsyncTask #1
07-12 07:31:59.879: E/AndroidRuntime(2873): java.lang.RuntimeException: An error occured while executing doInBackground()
07-12 07:31:59.879: E/AndroidRuntime(2873): at android.os.AsyncTask$3.done(AsyncTask.java:200)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.lang.Thread.run(Thread.java:1096)
07-12 07:31:59.879: E/AndroidRuntime(2873): Caused by: java.lang.NullPointerException
07-12 07:31:59.879: E/AndroidRuntime(2873): at sistem.ss.ConnectXML.doInBackground(ConnectXML.java:79)
07-12 07:31:59.879: E/AndroidRuntime(2873): at sistem.ss.ConnectXML.doInBackground(ConnectXML.java:1)
07-12 07:31:59.879: E/AndroidRuntime(2873): at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-12 07:31:59.879: E/AndroidRuntime(2873): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-12 07:31:59.879: E/AndroidRuntime(2873): ... 4 more
你可以發佈整個LogCat輸出嗎?只是「由......引起:java.lang.NullPointerException」不足以繼續。應該有一行指向您的代碼中發生空指針的行。 – Eric 2012-07-11 23:21:56
你有沒有考慮過使用AsycTask呢? – BlackHatSamurai 2012-07-11 23:22:55
@Soxxeh我加了logcat .. – Mert 2012-07-12 07:10:35