Ошибка залпа в андроид студии всегда ответом является ошибка - PullRequest
0 голосов
/ 04 октября 2018

Я работаю над своим проектом на последний год, и через некоторое время у меня есть презентация, но я получаю проблему, на которую залп всегда отвечает как ошибка, вот мой код залпа, а ниже - полный код действия

StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("---------------->>>", ""+response);
                        OrderConfirmationResponse orderConfirmationResponse = new Gson().fromJson(response, OrderConfirmationResponse.class);

                        if(orderConfirmationResponse.getSuccess()){
                            Toast.makeText(ConfirmOrderActivity.this, "Your order has been placed successfully!",Toast.LENGTH_LONG).show();
                            BasketPref.setBasket(null, ConfirmOrderActivity.this);
                            OrderPref.setOrder(orderConfirmationResponse.getOrder(), ConfirmOrderActivity.this);

                            startActivity(new Intent(ConfirmOrderActivity.this, MenuActivity.class));
                            finish();

                        }else{
                            Toast.makeText(ConfirmOrderActivity.this, "Unable to place your order, please try again later.",Toast.LENGTH_LONG).show();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                   public void onErrorResponse(VolleyError error) {
                        Toast.makeText(ConfirmOrderActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                    }

Ошибка отображается в области тостов ниже скриншота

enter image description here

Вот полный код действия, пожалуйста, дайте мне знать, если я могу предоставить вам больше информации

 package com.jazib.otrack;

import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.jazib.otrack.model.OrderConfirmationResponse;
import com.jazib.otrack.model.OrderHistory;
import com.jazib.otrack.model.OrderHistoryResponse;
import com.jazib.otrack.model.User;
import com.jazib.otrack.network.HistoryRequest;
import com.jazib.otrack.pref.BasketPref;
import com.jazib.otrack.pref.LocationPref;
import com.jazib.otrack.pref.OrderPref;
import com.jazib.otrack.pref.UserPref;
import com.jazib.otrack.utility.Config;
import com.jazib.otrack.utility.Utility;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.nlopez.smartlocation.OnLocationUpdatedListener;
import io.nlopez.smartlocation.SmartLocation;

public class ConfirmOrderActivity extends AppCompatActivity {
    String deal_id,deal_name,quantity,price,customer_id;


    //private SharedPreferences sp;
    private static final String REGISTER_URL = Config.BASE_URL+"order_enter.php";


    public static final String KEY_DEALID = "deal_id";
    public static final String KEY_DEAL_NAME = "deal_name";
    public static final String KEY_DEALI_QUANTITY= "quantity";
    public static final String KEY_DEAL_TOTAL = "price";
    public static final String KEY_CUSTOMER_ID = "customer_id";


    public static final String KEY_CUSTOMER_LAT = "lat";
    public static final String KEY_CUSTOMER_LNG = "lng";

    private User user;
    private Utility utility;
    private Context ctx;
    private Location mLocation;

    private TextView tvMessage;

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

        utility = new Utility();
        ctx = ConfirmOrderActivity.this;

        Intent intent = getIntent();
        price = intent.getStringExtra("dtotalprice");
       // Toast.makeText(ConfirmOrderActivity.this,price,Toast.LENGTH_LONG).show();

        final Button btnaddress = (Button) findViewById(R.id.btnaddress);
        final Button btnorder = (Button) findViewById(R.id.btnorder);
        tvMessage = (TextView) findViewById(R.id.textViewMessage);


        btnaddress.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Intent i = new Intent(ConfirmOrderActivity.this, ChangeAddressActivity.class);
                ConfirmOrderActivity.this.startActivity(i);


            }
        });

        btnorder.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (Utility.isNetworkAvailable(ConfirmOrderActivity.this)) {
                    confirmOrder();
                }else{
                    Utility.showToast("No Internet Connection.", ConfirmOrderActivity.this);
                }
            }
        });

        getHistory(UserPref.getUser(ctx).getId());

        initLocation();
    }

    @Override
    public void onResume(){
        super.onResume();


        //Show default address
        setDefaultAddress();
    }


    private void setDefaultAddress(){
        User user = UserPref.getUser(ConfirmOrderActivity.this);
        ((TextView) findViewById(R.id.addressConfirmation_addressTextView)).setText(user.getAddress());
        ((TextView) findViewById(R.id.addressConfirmation_cityTextView)).setText(user.getCity());
        ((TextView) findViewById(R.id.addressConfirmation_phoneTextView)).setText(user.getPhone());
    }


    private void confirmOrder(){
        user = UserPref.getUser(ConfirmOrderActivity.this);

        Intent intent = getIntent();
        deal_id = intent.getStringExtra("did");
        deal_name = intent.getStringExtra("dname");
        quantity= intent.getStringExtra("dquantity");
        price = intent.getStringExtra("dtotalprice");

        customer_id = user.getId();


        StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("---------------->>>", ""+response);
                        OrderConfirmationResponse orderConfirmationResponse = new Gson().fromJson(response, OrderConfirmationResponse.class);

                        if(orderConfirmationResponse.getSuccess()){
                            Toast.makeText(ConfirmOrderActivity.this, "Your order has been placed successfully!",Toast.LENGTH_LONG).show();
                            BasketPref.setBasket(null, ConfirmOrderActivity.this);
                            OrderPref.setOrder(orderConfirmationResponse.getOrder(), ConfirmOrderActivity.this);

                            startActivity(new Intent(ConfirmOrderActivity.this, MenuActivity.class));
                            finish();

                        }else{
                            Toast.makeText(ConfirmOrderActivity.this, "Unable to place your order, please try again later.",Toast.LENGTH_LONG).show();
                        }
                    }
                },
                new Response.ErrorListener() {
//                    @Override
//                    public void onErrorResponse(VolleyError error) {
//                        Toast.makeText(ConfirmOrderActivity.this,error.toString(),Toast.LENGTH_LONG).show();
//                    }
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(ConfirmOrderActivity.this,"Slow Internet issue,try again later",Toast.LENGTH_LONG).show();
                        }
                }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>();
                params.put(KEY_DEALID,deal_id);
                params.put(KEY_DEAL_NAME,deal_name);
                params.put(KEY_DEALI_QUANTITY, quantity);
                params.put(KEY_DEAL_TOTAL, price);
                params.put(KEY_CUSTOMER_ID, customer_id);
                params.put(KEY_CUSTOMER_LAT, ""+mLocation.getLatitude());
                params.put(KEY_CUSTOMER_LNG, ""+mLocation.getLongitude());



                return params;
            }
        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

    /************
     ************/
    private void getHistory(String id) {
        utility.showProgressDialog(ctx);
        Response.Listener<String> responseListener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                utility.hideProgressDialog(ctx);
                try {
                    Log.d("== updateOrderStatus >>", "" + response);
                    OrderHistoryResponse orderResponse = new Gson().fromJson(response, OrderHistoryResponse.class);
                    if (orderResponse.getSuccess()) {
                        if(isOrderPending(orderResponse.getHistory())){
                            //Utility.showToast("You have a under process order, please complete that first.", ctx);
                            findViewById(R.id.btnorder).setVisibility(View.INVISIBLE);
                            tvMessage.setVisibility(View.VISIBLE);
                            tvMessage.setText("You have a under process order, please complete that first.");
                        }else{
                            findViewById(R.id.btnorder).setVisibility(View.VISIBLE);
                            tvMessage.setVisibility(View.GONE);
                        }
                    } else {
                        Utility.showToast("Something went wrong, please try again.", ctx);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };

        Response.ErrorListener errorListener = new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                utility.hideProgressDialog(ctx);
                Toast.makeText(ctx, error.getLocalizedMessage(), Toast.LENGTH_LONG).show();
            }
        };

        HistoryRequest orderRequest = new HistoryRequest(id, responseListener, errorListener);
        RequestQueue queue = Volley.newRequestQueue(ctx);
        orderRequest.setRetryPolicy(new DefaultRetryPolicy(10000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        queue.add(orderRequest);
    }

    private boolean isOrderPending(List<OrderHistory> ordersList){
        for(OrderHistory orderHistory : ordersList){
            if(orderHistory.getStatusCode() == 0 || orderHistory.getStatusCode() == 1){
                return true;
            }
        }

        return false;
    }


    /********
     Location
     ********/
    private void initLocation() {
        SmartLocation.with(ctx).location().start(new OnLocationUpdatedListener() {
            @Override
            public void onLocationUpdated(Location location) {
                Log.d("***LOCATION***", "" + location.getLatitude() + " <---> " + location.getLongitude());
                mLocation = location;
                LocationPref.setLocation(location, ctx);



            }
        });
    }

}

1 Ответ

0 голосов
/ 04 октября 2018

Я не уверен, что делает ваш "import io.nlopez.smartlocation.SmartLocation;", но с устройства можно получить нулевое местоположение.Если у вас есть работающее устройство, пытающееся отключить службы определения местоположения во время работы приложения, и посмотрите, можете ли вы его воспроизвести.

Проверьте: https://developer.android.com/training/location/retrieve-current

Объект местоположения может быть нулевым вследующие ситуации:

  • Местоположение отключено в настройках устройства.
  • Результат может быть нулевым, даже если последнее местоположение было извлечено ранее, поскольку отключение расположения также очищает кэш.
  • Устройство никогда не записывало свое местоположение, что может быть в случае нового устройства илиустройство, которое было восстановлено до заводских настроек.
  • Службы Google Play на устройстве были перезапущены, и нет активного клиента провайдера Fused Location Provider, который запросил местоположение после перезапуска служб.Чтобы избежать этой ситуации, вы можете создать нового клиента и запросить обновления местоположения самостоятельно.Для получения дополнительной информации см. Получение обновлений местоположения.
...