0

I have an app that connects to server sends sql request and get JSON answer as JsonArray. Its Asynktask in seperate class (HTTPRequest.java is my AsyncTask class, Responce.java its my callback interface class) and it works correct.

when I use it in OrderActivity.java like below

@Override //my interface class function
public void onPostExecute(JSONArray Result) {
    load(Result);
}

private void load(JSONArray json) {
for(int i=0;i<json.length();i++){
try {
    JSONObject jo = json.getJSONObject(i);
    Product p = new Product(
            jo.getInt("ID"),
            jo.getInt("parent"),
            jo.getInt("category"),
            jo.getString("Item"),
            jo.getDouble("Price")
    );
    products.add(p);

} catch (JSONException e) {
    e.printStackTrace();
}
}

it does work and fills product with data, but when I assign to my class variable JSONArray json

JSONArray json = new JSONArray;
.
.
.
@Override
public void onPostExecute(JSONArray Result) {
    json = Result;
}

json is null

//HTTPRequest.java
public class HTTPRequest extends AsyncTask<String, Void, Integer> {

private Context context;
private Responce responce;
JSONArray json;

public HTTPRequest(Context context){
    this.context = context;
    responce = (Responce)context;
}

    @Override
protected Integer doInBackground(String... params) {

    OutputStream output;
    InputStream inputStream = null;
    HttpURLConnection connection = null;
    String charset = "UTF-8";
    Integer result = 0;

        try {
            URL uri = new URL(params[0]);
            connection = (HttpURLConnection) uri.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Accept-Charset", charset);
            connection.setRequestProperty("Content-Type", "text/plain; charset=" + charset);
            output = connection.getOutputStream();
            output.write(params[1].getBytes(charset));
            output.close();

            int statusCode = connection.getResponseCode();
            if (statusCode == 200) {
                inputStream = new BufferedInputStream(connection.getInputStream());
                json = new JSONArray(getJSON(inputStream));
                result = 1;
            }
        } catch (Exception e) {
            e.getLocalizedMessage();
        }
        return result;
}

@Override
protected void onPostExecute(Integer i) {
    super.onPostExecute(i);
    if(i == 1) {
        responce.onPostExecute(json);
    } else {
        responce.onPostExecute(null);
    }
}

private String getJSON(InputStream inputStream) throws IOException, JSONException {
    StringBuffer stringBuffer = new StringBuffer();
    BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
    String line = "";
    String result = null;

    while((line = bufferedReader.readLine()) != null) {
        stringBuffer.append(line.toString());
    }
    result = stringBuffer.toString();

    if(null!=inputStream){
        inputStream.close();
    }
    return result;
}
}

//Responce.java
public interface Responce {
public void onPostExecute(JSONArray Result);
}

//OrderActivity.java
public class OrderActivity extends Activity implements Responce{

ArrayList<Product> products = new ArrayList<Product>();
ProductAdapter productAdapter;
OrderItemAdapter orderItemAdapter;
ListView orderlist;
JSONArray ja;

Button btnBack;
Button btnTakeOrder;
ListView picklist;

HTTPRequest httpRequest;
String url = "http://192.168.3.125:8888/data/";
String query = "select * from vwitems order by category desc";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_order);

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    orderlist =(ListView)findViewById(R.id.orderlist);
    orderItemAdapter = new OrderItemAdapter(OrderActivity.this);

    btnBack = (Button)findViewById(R.id.btnBack);
    btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            productAdapter.filter(0);
        }
    });

    btnTakeOrder = (Button)findViewById(R.id.btnTakeOrder);
    btnTakeOrder.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Integer oid = 0;
            Order order = new Order(OrderActivity.this);
            oid = order.NewOrder(1, 2, 3);
            Toast.makeText(OrderActivity.this," " + order.getCount(), LENGTH_SHORT).show();
        }
    });

    orderlist.setAdapter(orderItemAdapter);

    picklist = (ListView) findViewById(R.id.picklist);
    picklist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            int pid = 0;
            if (productAdapter.getItem(position).isCategory()) {
                pid = productAdapter.getItem(position).getId();
                productAdapter.filter(pid);
            } else {
                OrderItem oi = new OrderItem();
                oi.setItemId(productAdapter.getItem(position).getId());
                oi.setItem(productAdapter.getItem(position).getItem());
                oi.setPrice(productAdapter.getItem(position).getPrice());
                search(oi);
            }
        }
    });

    httpRequest = new HTTPRequest(this);
    httpRequest.execute(url, query);
}

private boolean search(OrderItem oi){
    int size = orderItemAdapter.getCount();
    int i = 0;
    if(size != 0)
        for(OrderItem o : orderItemAdapter.getAll()){
            if(o.getItemId() == oi.getItemId()){
                orderItemAdapter.getItem(i).setQuantity(orderItemAdapter.getItem(i).getQuantity() + 1);
                orderItemAdapter.notifyDataSetChanged();
                return true;
            }
            i++;
        }

    orderItemAdapter.addItem(oi);
    orderItemAdapter.notifyDataSetChanged();
    return false;
}

private void load(JSONArray json) {

    for(int i=0;i<json.length();i++){
        try {

            JSONObject jo = json.getJSONObject(i);
            Product p = new Product(
                    jo.getInt("ID"),
                    jo.getInt("parent"),
                    jo.getInt("category"),
                    jo.getString("Item"),
                    jo.getDouble("Price")
            );
            products.add(p);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    productAdapter = new ProductAdapter(OrderActivity.this, products);
    picklist.setAdapter(productAdapter);

    productAdapter.filter(0);
}

@Override
public void onPostExecute(JSONArray Result) {
    load(Result);
}

/*
@Override
public void onPostExecute(JSONArray Result) {
    json = Result;
}
**/
}

sorry i forgot include this one

//Order.java
public class Order implements Responce{

private Context context;
private JSONArray json = new JSONArray();
private HTTPRequest httpRequest;

private int OrderID;
private Date OrderDate;
private int OrderTable;
private int Waiter;
private byte OrderStatus;
private List<OrderItem> orderItems;

public Order(Context context){
    this.context = context;
}

//some code here...

public Integer NewOrder(Integer guests, Integer waiter, Integer ordertable){
    String query = "insert into orders(orderdate, guests, waiter, ordertable) VALUES(NOW()," + guests + ", " + waiter + ", " + ordertable + "); SELECT LAST_INSERT_ID() as ID;";
    Integer result = 0;
    Connect(query);
    try {
        JSONObject jo = json.getJSONObject(0);
        result = jo.getInt("ID");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return result; //here i got 0 if i init result to 0, null or what ever i init my 
}

@Override
public void onPostExecute(JSONArray Result) {
    json = Result;
}

private void Connect (String query){
    httpRequest = new HTTPRequest(context);
    httpRequest.execute("http://192.168.3.125:8888/data/", query);
}

}

4
  • Show us how you define the AsyncTask and how you execute it. Commented Jul 24, 2015 at 12:57
  • You are missing the (). Commented Jul 24, 2015 at 13:02
  • you can try this link stackoverflow.com/questions/10220758/… Commented Jul 24, 2015 at 13:04
  • the code above work but i want use as commented part. ofcourse with some edit like move json declation and remove load parametrs and o on Commented Jul 24, 2015 at 13:14

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.