首页 > 解决方案 > 在 Google Play 上发布我的应用后,JSON 数据显示为空

问题描述

在 google play 上发布我的应用程序后 JSON 数据显示为空,但它在运行未发布的应用程序源代码时在模拟器中显示数据。数据来自外部服务器的在线数据库。 json 数据在 URL 中可见,但在我发布的应用程序中显示为 null。可能是什么原因??.....

请帮我

这是我的主要活动

import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import org.json.JSONArray;

import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class JUR extends AppCompatActivity implements jurAdapter.JURAdapterListener {
    private static final String TAG = MainActivity.class.getSimpleName();
    private RecyclerView recyclerView2;
    private List<JURlist> jurList;
    private jurAdapter mAdapter;
    private SearchView searchView;
    ProgressBar progressBar2;

    static {
        System.loadLibrary("keys");
    }
    public native String getJUR();
    public native String geturl2();

    String getJUR = URLEncoder.encode(getJUR());
    String geturl2 = URLEncoder.encode(geturl2());

    // url to fetch contacts json
    private  final String URL = "https://"+geturl2+"/...../"+getJUR;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jur);
        progressBar2 = findViewById(R.id.progress2);
        progressBar2.setVisibility(View.VISIBLE);
        Toolbar toolbar2 = findViewById(R.id.toolbar2);
        setSupportActionBar(toolbar2);

        // toolbar fancy stuff
//        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(R.string.toolbar_JUR);

        recyclerView2 = findViewById(R.id.recycler_view2);
        jurList = new ArrayList<>();
        mAdapter = new jurAdapter(this, jurList, this);

        // white background notification bar
        whiteNotificationBar(recyclerView2);

        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView2.setLayoutManager(mLayoutManager);
        recyclerView2.setItemAnimator(new DefaultItemAnimator());
        recyclerView2.addItemDecoration(new MyDividerItemDecoration(this, DividerItemDecoration.VERTICAL, 36));
        recyclerView2.setAdapter(mAdapter);

        fetchJUR();
    }

    /**
     * fetches json by making http calls
     */
    private void fetchJUR() {
        JsonArrayRequest request = new JsonArrayRequest(URL,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        if (response == null) {
                            Toast.makeText(getApplicationContext(), "Couldn't fetch JURISDICTION Pleas try again.", Toast.LENGTH_LONG).show();
                            return;
                        }

                        List<JURlist> items = new Gson().fromJson(response.toString(), new TypeToken<List<JURlist>>() {
                        }.getType());

                        // adding contacts to contacts list
                        jurList.clear();
                        jurList.addAll(items);

                        // refreshing recycler view
                        mAdapter.notifyDataSetChanged();
                        progressBar2.setVisibility(View.GONE);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // error in getting json
                Log.e(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(), "Error: " + error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

        APP.getInstance().addToRequestQueue(request);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.action_search)
                .getActionView();
        searchView.setSearchableInfo(searchManager
                .getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);

        // listening to search query text change
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // filter recycler view when query submitted
                mAdapter.getFilter().filter(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                // filter recycler view when text is changed
                mAdapter.getFilter().filter(query);
                return false;
            }
        });
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_search) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onBackPressed() {
        // close search view on back button pressed
        if (!searchView.isIconified()) {
            searchView.setIconified(true);
            return;
        }
        super.onBackPressed();

    }

    private void whiteNotificationBar(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int flags = view.getSystemUiVisibility();
            flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            view.setSystemUiVisibility(flags);
            getWindow().setStatusBarColor(Color.WHITE);
        }
    }


    @Override
    public void onJURSelected(JURlist jur) {
        Toast.makeText(getApplicationContext(), "Selected: " + jur.getSTATE() + ", " + jur.getZONE(), Toast.LENGTH_LONG).show();

    }
}

这是适配器


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;



public class jurAdapter extends RecyclerView.Adapter<jurAdapter.MyViewHolder>
        implements Filterable {
    private Context context;
    private List<JURlist> JuRlist;
    private List<JURlist> JURlistFiltered;
    private JURAdapterListener listener;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView STATE, ZONE, COM, DIVI, RANAME, RANGE1;
//        public ImageView thumbnail;

        public MyViewHolder(View view) {
            super(view);
            STATE = view.findViewById(R.id.STATE);
            ZONE = view.findViewById(R.id.ZONE);
            COM = view.findViewById(R.id.COM);
            DIVI = view.findViewById(R.id.DIVI);
            RANAME = view.findViewById(R.id.RANAME);
            RANGE1 = view.findViewById(R.id.RANGE1);


//            thumbnail = view.findViewById(R.id.thumbnail);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // send selected contact in callback
                    listener.onJURSelected(JURlistFiltered.get(getAdapterPosition()));
                }
            });
        }
    }


    public jurAdapter(Context context, List<JURlist> JURLIST, JURAdapterListener listener) {
        this.context = context;
        this.listener = listener;
        this.JuRlist = JURLIST;
        this.JURlistFiltered = JURLIST;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent1, int viewType1) {
        View itemView = LayoutInflater.from(parent1.getContext())
                .inflate(R.layout.jur_item_row, parent1, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {


        final JURlist jurlist = JURlistFiltered.get(position);
        holder.STATE.setText("STATE : "+jurlist.getSTATE()+"\r\n") ;
        holder.ZONE.setText("ZONE : "+jurlist.getZONE()+"\r\n");
        holder.COM.setText("COMMISSIONERATE NAME : "+jurlist.getCOM()+"\r\n");
        holder.DIVI.setText("DIVISION NAME : "+jurlist.getDIVI()+"\r\n");
        holder.RANAME.setText("RANGE NAME : "+jurlist.getRANAME()+"\r\n");
        holder.RANGE1.setText("RANGE JURISDICTION : \r\n"+jurlist.getRANGE1());

//        Glide.with(context)
//                .load(contact.getImage())
//                .apply(RequestOptions.circleCropTransform())
//                .into(holder.thumbnail);
    }

    @Override
    public int getItemCount() {
        return JURlistFiltered.size();
    }

    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                String charString = charSequence.toString();
                if (charString.isEmpty()) {
                    JURlistFiltered = JuRlist;
                } else {
                    List<JURlist> filteredList = new ArrayList<>();
                    for (JURlist row : JuRlist) {

                        // name match condition. this might differ depending on your requirement
                        // here we are looking for name or phone number match
                        if (row.getSTATE().toLowerCase().contains(charString.toLowerCase()) ||  row.getZONE().toLowerCase().contains(charString.toLowerCase()) ||  row.getCOM().toLowerCase().contains(charString.toLowerCase()) ||  row.getDIVI().toLowerCase().contains(charString.toLowerCase()) ||  row.getRANAME().toLowerCase().contains(charString.toLowerCase()) ||  row.getRANGE1().toLowerCase().contains(charString.toLowerCase())) {
                            filteredList.add(row);
                        }
                    }

                    JURlistFiltered = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = JURlistFiltered;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                JURlistFiltered = (ArrayList<JURlist>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

    public interface JURAdapterListener {
        void onJURSelected(JURlist jur);
    }
}```


  [1]: https://i.stack.imgur.com/vcWmG.jpg

标签: javajsonandroid-studio

解决方案


推荐阅读