試圖使一個searchview工作,用php和mysql。 用戶在搜索視圖/搜索欄中輸入搜索查詢來搜索特定信息,查詢被髮送到php文件,並且在RecyclerView上顯示來自php文件的結果。 不知道什麼是錯進入E/RecyclerView:沒有連接適配器;跳過佈局和不返回數據,我做錯了什麼?
MainActivity
public class MainActivity extends AppCompatActivity {
public static final int CONNECTION_TIMEOUT = 10000;
public static final int READ_TIMEOUT = 15000;
private RecyclerView mRVProd;
private AdapterProd mAdapter;
SearchView searchView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.searchmain, menu);
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);
}
@Override
protected void onNewIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
if (searchView != null) {
searchView.clearFocus();
}
new AsyncFetch(query).execute();
}
}
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();
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(String... params) {
try {
url = new URL("http://192.168.0.2/prod-search.php");
} catch (MalformedURLException e) {
e.printStackTrace();
return e.toString();
}
try {
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(READ_TIMEOUT);
conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
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) {
e1.printStackTrace();
return e1.toString();
}
try {
int response_code = conn.getResponseCode();
if (response_code == HttpURLConnection.HTTP_OK) {
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);
}
return (result.toString());
} else {
return("Erro");
}
} catch (IOException e) {
e.printStackTrace();
return e.toString();
} finally {
conn.disconnect();
}
}
@Override
protected void onPostExecute(String result) {
pdLoading.dismiss();
List<DataProd> data=new ArrayList<>();
pdLoading.dismiss();
if(result.equals("no rows")) {
Toast.makeText(MainActivity.this, "Nenhum resultado encontrado", Toast.LENGTH_LONG).show();
}else{
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
DataProd prodData = new DataProd();
prodData.nomep = json_data.getString("nomeprod");
prodData.marcap = json_data.getString("marcaprod");
prodData.pesop = json_data.getInt("pesoprod");
prodData.valorp = json_data.getInt("valorprod");
prodData.pratp = json_data.getInt("pratprod");
data.add(prodData);
}
mRVProd = (RecyclerView) findViewById(R.id.listaprodpreco);
mAdapter = new AdapterProd(MainActivity.this, data);
mRVProd.setAdapter(mAdapter);
mRVProd.setLayoutManager(new LinearLayoutManager(MainActivity.this));
} catch (JSONException e) {
Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_LONG).show();
Toast.makeText(MainActivity.this, result.toString(), Toast.LENGTH_LONG).show();
}
}
}
}
}
適配器
public class AdapterProd extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private LayoutInflater inflater;
List<DataProd> data= Collections.emptyList();
DataProd current;
int currentPos=0;
public AdapterProd(Context context, List<DataProd> data){
this.context=context;
inflater= LayoutInflater.from(context);
this.data=data;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=inflater.inflate(R.layout.containerprod, parent, false);
MyHolder holder=new MyHolder(view);
return holder;
}
// Bind data
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyHolder myHolder= (MyHolder) holder;
DataProd current=data.get(position);
myHolder.textnomep.setText(current.nomep);
myHolder.textmarcap.setText("Marca: " + current.marcap);
myHolder.textpesop.setText("Peso: " + current.pesop);
myHolder.textvalorp.setText("Rs " + current.valorp + "\\Und");
myHolder.textvalorp.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));
myHolder.textpratp.setText("Prateleira: current.pratprod");
}
@Override
public int getItemCount() {
return data.size();
}
class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView textnomep;
TextView textmarcap;
TextView textpesop;
TextView textvalorp;
TextView textpratp;
public MyHolder(View itemView) {
super(itemView);
textnomep = (TextView) itemView.findViewById(R.id.textnomep);
textmarcap = (TextView) itemView.findViewById(R.id.textmarcap);
textpesop = (TextView) itemView.findViewById(R.id.textpesop);
textvalorp = (TextView) itemView.findViewById(R.id.textvalorp);
textpratp = (TextView) itemView.findViewById(R.id.textpratp);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(context, "Você clicou em um item", Toast.LENGTH_SHORT).show();
}
}
}
不知道我在做什麼錯,不斷收到這種E/RecyclerView:無連接適配器;跳過佈局,任何人都可以幫忙?