Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SearchView总是给出前几个json值的值_Php_Android_Json - Fatal编程技术网

Php SearchView总是给出前几个json值的值

Php SearchView总是给出前几个json值的值,php,android,json,Php,Android,Json,下面是我的搜索活动 public class SearchActivity extends AppCompatActivity { // CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds public static final int CONNECTION_TIMEOUT = 10000; public static final int READ_TIMEOUT = 15000; private Sim

下面是我的搜索活动

public class SearchActivity extends AppCompatActivity {
    // CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds
    public static final int CONNECTION_TIMEOUT = 10000;
    public static final int READ_TIMEOUT = 15000;
    private SimpleCursorAdapter myAdapter;
    SearchView searchView = null;
    private WarehouseSalesDetails[] strArrData;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_item);
        Toolbar toolBarSearch = (Toolbar)findViewById(R.id.toolbarSearch);
        setSupportActionBar(toolBarSearch);

        final String[] from = new String[]{"title"};
        final int[] to = new int[]{android.R.id.text1};
        //setup SimpleCursorAdapter
        myAdapter = new SimpleCursorAdapter(SearchActivity.this,android.R.layout.simple_spinner_dropdown_item,null,from,to,
                CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        new RetrieveWarehouseSalesTask(this).execute();


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){

        getMenuInflater().inflate(R.menu.menu_search,menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager)SearchActivity.this.getSystemService(Context.SEARCH_SERVICE);
        if(searchItem!=null){
            searchView = (SearchView) searchItem.getActionView();
        }
        if(searchView!=null){
            searchView.setSearchableInfo(searchManager.getSearchableInfo(SearchActivity.this.getComponentName()));
            searchView.setIconified(false);
            searchView.setSuggestionsAdapter(myAdapter);
            //getting selected on item suggestion
            searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener(){
                @Override
                public boolean onSuggestionClick(int position){
                    //Add clicked text to search box
                    CursorAdapter ca = searchView.getSuggestionsAdapter();
                    Cursor cursor = ca.getCursor();
                    cursor.moveToPosition(position);
                    searchView.setQuery(cursor.getString(cursor.getColumnIndex("title")),false);
                    Log.d("strArr id",strArrData[position].id);
                    String selectedID = strArrData[position].id;
                    Intent intent = new Intent(SearchActivity.this,RetrieveIndividualWarehouseSales.class);
                    intent.putExtra("pid",selectedID);
                    startActivity(intent);

                    return true;

                }

                @Override
                public boolean onSuggestionSelect(int position){
                    return true;
                }
            });
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
                @Override
                public boolean onQueryTextSubmit(String s){
                    return false;
                }
                @Override
                public boolean onQueryTextChange(String s){
                    //filter data
                    final MatrixCursor mc = new MatrixCursor(new String[]{
                            BaseColumns._ID,"title"
                    });
                    for(int i = 0; i<strArrData.length; i++){
                        if(strArrData[i].title.toLowerCase().startsWith(s.toLowerCase())){
                            mc.addRow(new Object[]{i,strArrData[i].id});
                        }

                    }

                    myAdapter.changeCursor(mc);
                    return false;
                }
            });


        }
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onNewIntent(Intent intent){
        if(Intent.ACTION_SEARCH.equals(intent.getAction())){
            String query = intent.getStringExtra(SearchManager.QUERY);
            if(searchView!=null){
                searchView.clearFocus();
            }
        }
    }

    class RetrieveWarehouseSalesTask extends AsyncTask<Void,Void,Void> {
        private String TAG = ActiveWarehouseSalesFragment.RetrieveWarehouseSalesTask.class.getSimpleName();
        private String TAG_PID = "pid";
        public ProgressDialog pDialog;
        private Context context;
        //URL to get JSON details
        private String url = "http://www.example.com/abc.php";
        ArrayList<HashMap<String,String>> sales_details;
        List<WarehouseSalesDetails> data = new ArrayList<>();
        JSONObject jsonObj;
        String jsonStr;
        JSONArray sales;

        //for recycler view
        private RecyclerView warehouse_recycler;
        private AdapterRecycler mAdapter;


        public RetrieveWarehouseSalesTask(Context context){
            this.context = context;
            sales_details = new ArrayList<>();

        }



        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            pDialog = new ProgressDialog(context);
            pDialog.setMessage("Searching...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected Void doInBackground(Void... arg0){
            HttpHandler sh = new HttpHandler();
            //making a request to URL and getting response
            jsonStr = sh.makeServiceCall(url);
            Log.e(TAG, "Response from url (SearchActivity): " + jsonStr);


            return null;
        }

        @Override
        protected void onPostExecute(Void result){
            //ArrayList<String> dataList = new ArrayList<String>();
            super.onPostExecute(result);
            if(pDialog.isShowing()){
                pDialog.dismiss();
            }
            if(jsonStr != null){
                try{
                    jsonObj = new JSONObject(jsonStr);
                    //Getting JSON Array Node
                    sales = jsonObj.getJSONArray("Result");
                    //looping through all results
                    for(int i = sales.length() - 1; i >= 0 ;i--){
                        JSONObject s = sales.getJSONObject(i);
                        WarehouseSalesDetails wsd = new WarehouseSalesDetails();
                        wsd.id = s.getString("id");
                        wsd.company_name = s.getString("company_name");
                        wsd.promotion_image= s.getString("promotion_image");
                        wsd.title = s.getString("title");
                        wsd.promotional_period = s.getString("promotional_period");
                        wsd.viewCount = s.getString("view_count");
                        data.add(wsd);
                    }
                    //strArrData = dataList.toArray(new String[dataList.size()]);
                    strArrData = data.toArray(new WarehouseSalesDetails[data.size()]);
                    Log.d("TAG",sales_details.toString());
                }catch(final JSONException e){
                    Log.e(TAG, "JSON parsing error: " + e.getMessage());
                }
            }else{
                Log.e(TAG,"Couldn't get json from server");
            }
        }

    }
}
公共类SearchActivity扩展了AppCompatActivity{
//连接超时和读取超时以毫秒为单位
公共静态最终int连接\u超时=10000;
公共静态最终整型读取超时=15000;
私有SimpleCursorAdapter-myAdapter;
SearchView SearchView=null;
私人仓库销售详情[]数据;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.search_项);
工具栏工具栏搜索=(工具栏)findViewById(R.id.toolBarSearch);
设置支持操作栏(工具栏搜索);
最终字符串[]from=新字符串[]{“title”};
final int[]to=new int[]{android.R.id.text1};
//设置SimpleCorsorAdapter
myAdapter=new SimpleCursorAdapter(SearchActivity.this,android.R.layout.simple\u微调器\u下拉菜单\u项,null,from,to,
游标适配器。标志(寄存器、内容、观察者);
新建RetrieveWarehouseSalesTask(this.execute();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单。菜单搜索,菜单);
MenuItem searchItem=menu.findItem(R.id.action\u search);
SearchManager SearchManager=(SearchManager)SearchActivity.this.getSystemService(Context.SEARCH\u服务);
if(searchItem!=null){
searchView=(searchView)searchItem.getActionView();
}
if(searchView!=null){
searchView.setSearchableInfo(searchManager.getSearchableInfo(SearchActivity.this.getComponentName());
searchView.setIconified(false);
searchView.setSuggestionAdapter(myAdapter);
//正在根据项目建议进行选择
searchView.setOnSuggestionListener(新的searchView.OnSuggestionListener(){
@凌驾
公共布尔onSuggestionClick(整数位置){
//将单击的文本添加到搜索框
CursorAdapter ca=searchView.GetSuggestionAdapter();
Cursor=ca.getCursor();
光标。移动位置(位置);
searchView.setQuery(cursor.getString(cursor.getColumnIndex(“title”)),false);
Log.d(“strArr id”,strArrData[position].id);
字符串selectedID=strArrData[position].id;
意向意向=新意向(SearchActivity.this,RetrieveIndividualWarehouseSales.class);
intent.putExtra(“pid”,选择EDID);
星触觉(意向);
返回true;
}
@凌驾
公共布尔值onSuggestionSelect(整数位置){
返回true;
}
});
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串s){
返回false;
}
@凌驾
公共布尔值onQueryTextChange(字符串s){
//过滤数据
最终MatrixCursor mc=新MatrixCursor(新字符串[]){
BaseColumns.\u ID,“标题”
});
对于(int i=0;i=0;i--){
JSONObject s=sales.getJSONObject(i);
WarehouseSalesDetails wsd=新WarehouseSalesDetails();
wsd.id=s.getString(“id”);
wsd.company_name=s.getString(“company_name”);
wsd.promotion\u image=s.getString(“promotion\u image”);
wsd.title=s.getString(“title”);
wsd.promotional_period=s.getString(“promotional_period”);
wsd.viewCount=s.getString(“视图计数”);
data.add(水务署);
}
//strArrData=dataList.toArray(新字符串[dataList.size()]);
strArrData=data.toArray(新仓库SalesDetails[data.size()]);
Log.d(“TAG”,sales_details.toString());
}捕获(最终JSONException e){
Log.e(标记“JSON解析错误:”+e.getMessage());
}
}否则{
Log.e(标记“无法从服务器获取json”);
}
}
}
}
当我将内容写入搜索框时,它会正确过滤,但过滤后,如果我单击任何项目,它总是在同一位置打开上一个项目的值。这些值始终是json值的前几个值。我应该如何解决此问题?

给你

您在建议侦听器中获得的位置与相应的搜索查询结果集相对应。您不能使用相同的位置

CursorAdapter ca = searchView.getSuggestionsAdapter(); 
Cursor cursor = ca.getCursor();
If (cursor.moveToPosition(position)) {
 String selectedID = cursor.getString(cursor.getColumnIndex("id");
 searchView.setQuery(cursor.getString(cursor.getColumnIndex("title")),false); 
 Log.d("strArr id",strArrData[position].id); 
 Intent intent = new Intent(SearchActivity.this,RetrieveIndividualWarehouseSales.class);
 intent.putExtra("pid",selectedID); 
 startActivity(intent);
 }

出现此错误android.database.CursorIndexOutOfBoundsException:请求的列:-1,#个列:2My bad。这应该是标题而不是id。String selectedID=cursor.getString(cursor.getColumnIndex(“标题”);selectedID是标题的值而不是id