同期ロジックにより、AndroidのdbからサーバーにsendOrderが実行されるWebサービスによって作成されますdoInBackgroud()
。
まずアプリを起動します。SyncClick
次に、[データベースをエラーなしで同期]をクリックします。その後、アプリケーションに移動し、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