Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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 如何在Android中向SearchView发送字符串值_Php_Android_Mysql_Android Layout_Android Studio - Fatal编程技术网

Php 如何在Android中向SearchView发送字符串值

Php 如何在Android中向SearchView发送字符串值,php,android,mysql,android-layout,android-studio,Php,Android,Mysql,Android Layout,Android Studio,我的代码有点问题。我有一个SearchView,它允许用户使用PHP和JSON从SQL数据库中搜索输入的值,以便在RecyclerView中查看结果。在basic中,我使用Volley将我的Android应用程序连接到web服务器 这里的问题是,我的搜索布局上有一个按钮,按下该按钮时,弹出一个日历,要求用户选择日期。当用户选择日期时,所选日期将显示在文本视图中。但是,我希望在SearchView中显示日期 以下是我的搜索类代码: import android.app.DatePickerDial

我的代码有点问题。我有一个SearchView,它允许用户使用PHP和JSON从SQL数据库中搜索输入的值,以便在RecyclerView中查看结果。在basic中,我使用Volley将我的Android应用程序连接到web服务器

这里的问题是,我的搜索布局上有一个按钮,按下该按钮时,弹出一个日历,要求用户选择日期。当用户选择日期时,所选日期将显示在文本视图中。但是,我希望在SearchView中显示日期

以下是我的搜索类代码:

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class MainActivity 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 RecyclerView mRVFish;
    private AdapterFish mAdapter;


    private TextView tvDisplayDate;
    //private DatePicker dpResult;
    private Button btnChangeDate;

    private int year;
    private int month;
    private int day;
    static final int DATE_DIALOG_ID = 999;

    SearchView searchView = null;


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


        setCurrentDateOnView();
        addListenerOnButton();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // adds item to action bar
        getMenuInflater().inflate(R.menu.search_main, menu);

        // Get Search item from action bar and Get Search service
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager) 
    MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        if (searchView != null) {


searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
                searchView.setIconified(false);
        }

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        return super.onOptionsItemSelected(item);
    }

    // Every time when you press search button on keypad an Activity is 
    recreated which in turn calls this function
    @Override
    protected void onNewIntent(Intent intent) {
        // Get search query and create object of class AsyncFetch
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            if (searchView != null) {
                searchView.clearFocus();
            }
            new AsyncFetch(query).execute();

        }
    }

    // Create class AsyncFetch
    private class AsyncFetch extends AsyncTask<String, String, String> {

        ProgressDialog pdLoading = new ProgressDialog(MainActivity.this);
        HttpURLConnection conn;
        URL url = null;
        String searchQuery;

        public AsyncFetch(String searchQuery){
            this.searchQuery=searchQuery;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            //this method will be running on UI thread
            pdLoading.setMessage("\tLoading...");
            pdLoading.setCancelable(false);
            pdLoading.show();

        }

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

                // Enter URL address where your php file resides
                url = new URL("http://192.168.x.x/test/test-search.php");

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return e.toString();
            }
            try {

                // Setup HttpURLConnection class to send and receive data 
    from php and mysql
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(READ_TIMEOUT);
                conn.setConnectTimeout(CONNECTION_TIMEOUT);
                conn.setRequestMethod("POST");

                // setDoInput and setDoOutput to true as we send and recieve 
    data
                conn.setDoInput(true);
                conn.setDoOutput(true);

                // add parameter to our above url
                Uri.Builder builder = new 
    Uri.Builder().appendQueryParameter("searchQuery", searchQuery);
                String query = builder.build().getEncodedQuery();

                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new 
    OutputStreamWriter(os, "UTF-8"));
                writer.write(query);
                writer.flush();
                writer.close();
                os.close();
                conn.connect();

            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                return e1.toString();
            }

            try {

                int response_code = conn.getResponseCode();

                // Check if successful connection made
                if (response_code == HttpURLConnection.HTTP_OK) {

                    // Read data sent from server
                    InputStream input = conn.getInputStream();
                    BufferedReader reader = new BufferedReader(new 
    InputStreamReader(input));
                    StringBuilder result = new StringBuilder();
                    String line;

                    while ((line = reader.readLine()) != null) {
                        result.append(line);
                    }

                    // Pass data to onPostExecute method
                    return (result.toString());

                } else {
                    return("Connection error");
                }

            } catch (IOException e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                conn.disconnect();
            }


        }

        @Override
        protected void onPostExecute(String result) {

            //this method will be running on UI thread
            pdLoading.dismiss();
            List<DataFish> data=new ArrayList<>();

            pdLoading.dismiss();
            if(result.equals("no rows")) {
                Toast.makeText(MainActivity.this, "No Results found for 
    entered query", Toast.LENGTH_LONG).show();
            }else{

                try {

                    JSONArray jArray = new JSONArray(result);

                    // Extract data from json and store into ArrayList as 
    class objects
                    for (int i = 0; i < jArray.length(); i++) {
                        JSONObject json_data = jArray.getJSONObject(i);
                        DataFish fishData = new DataFish();
                        fishData.datecodes = 
    json_data.getString("datecode");
                        fishData.names = json_data.getString("name");
                        fishData.emails = json_data.getString("email");
                        fishData.timecodes = json_data.getInt("timecode");
                        fishData.numbers = json_data.getInt("numbers");
                        data.add(fishData);
                    }

                    // Setup and Handover data to recyclerview
                    mRVFish = (RecyclerView) 
    findViewById(R.id.fishPriceList);
                    mAdapter = new AdapterFish(MainActivity.this, data);
                    mRVFish.setAdapter(mAdapter);
                    mRVFish.setLayoutManager(new 
    LinearLayoutManager(MainActivity.this));

                } catch (JSONException e) {
                    // You to understand what actually error is and handle 
    it appropriately
                    Toast.makeText(MainActivity.this, e.toString(), 
    Toast.LENGTH_LONG).show();
                    Toast.makeText(MainActivity.this, result.toString(), 
    Toast.LENGTH_LONG).show();
                }

            }

        }

    }




    // display current date
    public void setCurrentDateOnView() {

        //getMenuInflater().inflate(R.menu.search_main, null);

        tvDisplayDate = (TextView) findViewById(R.id.tvDate);
        //dpResult = (DatePicker) findViewById(R.id.dpResult);

        final Calendar c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);

        // set current date into textview
        tvDisplayDate.setText(new StringBuilder()
                // Month is 0 based, just add 1, if you want to
                .append(year).append("")
                .append(month<10?("0"+month):(month)).append("")
                .append(day<10?("0"+day):(day)).append(""));

        // set current date into datepicker
        //dpResult.init(year, month, day, null);

    }

    public void addListenerOnButton() {

        btnChangeDate = (Button) findViewById(R.id.btnChangeDate);

        btnChangeDate.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                showDialog(DATE_DIALOG_ID);

            }

        });

    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DATE_DIALOG_ID:
                // set date picker as current date
                return new DatePickerDialog(this, datePickerListener,
                        year, month,day);
        }
        return null;
    }

    private DatePickerDialog.OnDateSetListener datePickerListener
            = new DatePickerDialog.OnDateSetListener() {

        // when dialog box is closed, below method will be called.
        public void onDateSet(DatePicker view, int selectedYear,
                              int selectedMonth, int selectedDay) {
            year = selectedYear;
            month = selectedMonth;
            day = selectedDay;

            // set selected date into textview
            tvDisplayDate.setText(new 
    StringBuilder().append(year).append("")
                    .append(month<10?("0"+month):(month)).append("")
                    .append(day<10?("0"+day):(day)).append(""));

            // set selected date into datepicker also
            //dpResult.init(year, month, day, null);

        }
    };
}
导入android.app.DatePickerDialog;
导入android.app.Dialog;
导入android.app.ProgressDialog;
导入android.app.SearchManager;
导入android.content.Context;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.support.v7.widget.SearchView;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.Button;
导入android.widget.DatePicker;
导入android.widget.TextView;
导入android.widget.Toast;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
导入java.io.OutputStreamWriter;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.List;
公共类MainActivity扩展了AppCompatActivity{
//连接超时和读取超时以毫秒为单位
公共静态最终int连接\u超时=10000;
公共静态最终整型读取超时=15000;
私人回收站查看mRVFish;
私人适应鱼;
私有文本视图tvDisplayDate;
//私有日期选择器dpResult;
私人按钮btnChangeDate;
私人国际年;
私人整数月;
私人国际日;
静态最终整数日期对话框ID=999;
SearchView SearchView=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setCurrentDateOnView();
addListenerOnButton();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//将项目添加到操作栏
getMenuInflater().充气(R.menu.search\u主菜单);
//从操作栏获取搜索项并获取搜索服务
MenuItem searchItem=menu.findItem(R.id.action\u search);
SearchManager SearchManager=(SearchManager)
MainActivity.this.getSystemService(Context.SEARCH\u服务);
if(searchItem!=null){
searchView=(searchView)searchItem.getActionView();
}
if(searchView!=null){
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName());
searchView.setIconified(false);
}
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
返回super.onOptionsItemSelected(项目);
}
//每次按下键盘上的搜索按钮时,都会显示一个活动
重新创建,然后调用此函数
@凌驾
受保护的void onNewIntent(意图){
//获取搜索查询并创建AsyncFetch类的对象
if(Intent.ACTION_SEARCH.equals(Intent.getAction())){
String query=intent.getStringExtra(SearchManager.query);
if(searchView!=null){
searchView.clearFocus();
}
新建AsyncFetch(query.execute();
}
}
//创建类异步获取
私有类AsyncFetch扩展了AsyncTask{
ProgressDialog pdLoading=新建ProgressDialog(MainActivity.this);
httpurl连接连接;
URL=null;
字符串查询;
公共异步获取(字符串搜索查询){
this.searchQuery=searchQuery;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//此方法将在UI线程上运行
pdLoading.setMessage(“\t加载…”);
pdLoading.setCancelable(假);
pdLoading.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
//输入php文件所在的URL地址
url=新url(“http://192.168.x.x/test/test-search.php");
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
返回e.toString();
}
试一试{
//设置HttpURLConnection类以发送和接收数据
来自php和mysql
conn=(HttpURLConnection)url.openConnection();
conn.setReadTimeout(读取超时);
连接设置连接超时(连接超时);
conn.setRequestMethod(“POST”);
//发送和接收时,将setDoInput和setDoOutput设置为true
数据
conn.setDoInput(真);
连接设置输出(真);
//将参数添加到我们上面的url
Uri.Builder=new
Uri.Builder().appendQueryParameter(“searchQuery”,searchQuery);
字符串查询=builder.build().getEncodedQuery();
OutputStream os=conn.getOutputStream();
BufferedWriter=新的BufferedWriter(新的
OutputStreamWriter(操作系统,“UTF-8”);
writer.write(查询);
作家,同花顺
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/fishPriceList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="10dp"
        android:layout_weight="1"
        />

    <TextView
        android:id="@+id/tvDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAlignment="viewStart"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="?attr/editTextColor" />

    <Button
        android:id="@+id/btnChangeDate"
        android:layout_width="175dp"
        android:layout_height="wrap_content"
        android:background="@color/bg_login"
        android:text="Change Date"
        android:textColor="@color/white" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/textFishName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Date"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textPrice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:text="Number"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/colorAccent" />

    <TextView
        android:id="@+id/textSize"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textFishName"
        android:layout_marginLeft="5dp"
        android:text="Name"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="#666" />

    <TextView
        android:id="@+id/TimeCode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Time Code"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="#666"
        android:textSize="18sp"
        android:layout_below="@+id/textType"
        android:layout_alignParentStart="true" />

    <TextView
        android:id="@+id/textType"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textSize"
        android:layout_marginLeft="5dp"
        android:text="Email"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="#666" />

</RelativeLayout>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".SearchResultsActivity">

    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>

</menu>