2017-05-23 1 views
-1

내 검색에 표시하고 싶다면 내 단어를 입력해야합니다. 내게 토스트해야합니다. 내게 토스트해야합니다. "No Result.but 문제는 ​​0.5 초 후에 데이터를 가져옵니다 .so서버에서 데이터가없는 경우 메시지를 토스트

String text = txtsearch.getText().toString(); 
      new AsyncTaskSearch("http://192.168.1.100/afgApp/search.php", text).execute(); 
        final Timer timer = new Timer(); 
        timer.scheduleAtFixedRate(new TimerTask() { 
         @Override 
         public void run() { 
          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            if (!Activity_Search.data.equals("")) { 
             Toast.makeText(Activity_Search.this, data, Toast.LENGTH_SHORT).show(); 
             timer.cancel(); 
            }else { 
             Toast.makeText(Activity_Search.this, "No results", Toast.LENGTH_SHORT).show(); 
            } 
           } 
          }); 
         } 
        },1,500); 
        Activity_Search.data = ""; 
       } 

//Asynctask.java

, 비슷한 단어가없는 경우 내가 첫 번째 버튼을 클릭하여 다음 검색 결과를 토스트없는 데이터를 가져 와서 원하는 recyclerview.I에서 그들을 표시 할 때 나에게 마지막에 결과를 토스트 없습니다
public class AsyncTaskSearch extends AsyncTask{ 
    public String link=""; 
    public String text=""; 


    public AsyncTaskSearch(String link,String text){ 

     this.link=link; 
     this.text=text; 

    } 
    @Override 
    protected Object doInBackground(Object[] params) { 
     try{ 
      String data= URLEncoder.encode("text","UTF8")+"="+URLEncoder.encode(text,"UTF8"); 

      URL url=new URL(link); 
      URLConnection connection=url.openConnection(); 

      connection.setDoOutput(true); 
      OutputStreamWriter writer=new OutputStreamWriter(connection.getOutputStream()); 
      writer.write(data); 
      writer.flush(); 
      BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      StringBuilder builder=new StringBuilder(); 

      String line=null; 

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

      } 

      Activity_Search.data=builder.toString(); 


     }catch (Exception e){ 

     } 
     return ""; 
    } 
} 
+0

토스트를 구성하는 방법에 대한 더 나은 의견을 얻기 위해'AsyncTaskSearch' 코드를 게시하십시오. 그러나 내 주석은 여전히 ​​그대로 있습니다. AsyncTask의 onPostExecute에서 토스트하고 싶습니다. – Shark

답변

0

어떻게 AysncTask를 사용하고 있는지 잘 모르겠습니다.이 코드를 사용해보세요.

private class AsyncGetClass extends AsyncTask<Object, Void, String> { 
    ProgressDialog progressDialog; 
    String TAG, url; 
    AsyncHttpResponseHandler asyncHttpResponseHandler; 
    Context context; 

    public AsyncGetClass(Context context) { 
     // TODO Auto-generated constructor stub 
     this.context = context; 

    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     if (!isProgressHiding) 
      if (progressDialog == null) { 
       progressDialog = createProgressDialog(context); 
       progressDialog.show(); 
      } else { 
       progressDialog.show(); 
      } 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    protected String doInBackground(Object... params) { 
     // TODO Auto-generated method stub 
     TAG = (String) params[0]; 
     url = (String) params[1]; 
     asyncHttpResponseHandler = (AsyncHttpResponseHandler) params[3]; 

     InputStream is = null; 
     String result = ""; 

     // HTTP post 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 
      Log.e(TAG, url); 
      HttpResponse response = httpclient.execute(httpGet); 

      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     } catch (Exception e) { 
      Log.e(TAG, "Error in http connection " + e.toString()); 
      Toast.makeText(Activity_Search.this, "No results", Toast.LENGTH_SHORT).show(); 
     } 

     // Convert response to string 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
      // Log.i(TAG + ".result", result); 
      return result; 
     } catch (Exception e) { 
      Log.e(TAG, "Error converting result " + e.toString()); 
      return null; 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     if (!isProgressHiding) 
      if (progressDialog != null) 
       progressDialog.dismiss(); 
     if (result != null) 
      try { 
       Log.i(TAG, result); 
       asyncHttpResponseHandler.onSuccess(result); 
      } catch (Exception e) { 
       Log.e(TAG, "Must implement the interface " + e.toString()); 
      } 
    } 

} 
+0

내가 asynctask 코드를 게시했습니다. @ Zohaib Hassan – mahdi

+0

AysncTask가 올바르게 작동하고 예상 결과를 표시하는 경우 AysncTask 클래스에서 "OnPostExecute()"메서드를 재정의하고 "Toast"코드 및 조건을 표시하는 "doInBackground"() "메소드를 호출하고"onPostExecute() "메소드를 삽입하십시오. –

+0

토스트 코드를 기본 클래스가 아닌 "AysncTask"클래스에 넣으십시오. –

관련 문제