2016-08-13 3 views
0

안녕 얘들 아 내 검색 활동에 문제가있다. 예를 들어 항목을 검색하고 (iphone 6) "iphone"또는 "6"또는 "i"및 기타 항목 만 입력하면 검색이 작동하지만 신의 항목 전체 이름을 입력하면 이 경우 : 아이폰 6, 애플 리케이션 크래시. 이 코드입니다 :활동 검색 충돌

public class SearchActivity extends AppCompatActivity { 

Toolbar toolbar; 
ListView lsv; 
String categoryId,keyword,city; 
ProgressDialog progressBar; 
List<CatAdd> catAddList; 
CateAdDisplayAdapter adapter; 
Typeface typeface; 

@SuppressLint("NewApi") @Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activty_search); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if (toolbar != null) { 
     toolbar.setTitle("Browse Ads"); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    } 
    getActionBarTextView(); 

    typeface = Typeface.createFromAsset(getAssets(), "fonts/GandhiSerif-Bold.otf"); 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 

    lsv = (ListView)findViewById(R.id.listView1); 
    catAddList = new ArrayList<CatAdd>(); 

    categoryId = getIntent().getExtras().getString("categoryId", "0"); 
    keyword = getIntent().getExtras().getString("keyword","keyword"); 
    city  = getIntent().getExtras().getString("city","city"); 

    new SearchList().execute(); 

    lsv.setOnItemClickListener(new OnItemClickListener() 
    { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
           long arg3) { 
      Intent intent = new Intent(getApplicationContext(), BrowseAdsDetailActivity.class); 
      intent.putExtra("adId", String.valueOf(catAddList.get(arg2).getAddid())); 
      startActivity(intent); 
     } 
    }); 
} 
@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(); 

    if(id==android.R.id.home) 
    { 
     onBackPressed(); 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 

} 
private TextView getActionBarTextView() { 
    TextView titleTextView = null; 

    try { 
     Field f = toolbar.getClass().getDeclaredField("mTitleTextView"); 
     f.setAccessible(true); 
     titleTextView = (TextView)f.get(toolbar); 
     titleTextView.setTypeface(typeface); 

    } catch (NoSuchFieldException e) { 
    } catch (IllegalAccessException e) { 
    } 
    return titleTextView; 
} 

class SearchList extends AsyncTask<Void, Void, Void> 
{ 
    String jsonStr = null; 
    CustomProgressDialog cd = new CustomProgressDialog(); 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     cd.showdialog(SearchActivity.this, "Loading..."); 
    } 
    @Override 
    protected Void doInBackground(Void... arg0) { 
     ServiceHandler sh = new ServiceHandler(); 
     jsonStr = sh.makeServiceCall(String.format(Constants.ADSEARCH_URL,categoryId,city,keyword), ServiceHandler.GET); 
     Log.d("Response: ", "> " + jsonStr); 

     if (jsonStr != null) { 
      try { 
       JSONObject jsonObj = new JSONObject(jsonStr); 
       JSONArray contacts = jsonObj.getJSONArray(Constants.TAG); 
       for (int i = contacts.length()-1; i > -1; i--) { 
        JSONObject c = contacts.getJSONObject(i); 
        String adId = c.getString(Constants.CAT_ADID); 
        String adTitle = c.getString(Constants.CAT_ADTITLE); 
        String adDes = c.getString(Constants.CAT_ADDES); 
        String adCreatedAt = c.getString("adCreatedAt"); 
        String adcity= c.getString(Constants.CAT_CITY); 
        String adPrise= c.getString(Constants.CAT_PRICE); 

        JSONArray arrImages=c.getJSONArray("images"); 
        ArrayList<String> imgArray=new ArrayList<String>(); 
        for(int j=0;j<arrImages.length();j++) 
        { 
         JSONObject imgObj=arrImages.getJSONObject(j); 
         if(imgObj.has("imageName")) 
         { 
          imgArray.add(imgObj.getString("imageName")); 
         } 

        } 
        CatAdd v=new CatAdd(); 
        v.setAddid(Integer.parseInt(adId)); 
        v.setAdTitle(adTitle); 
        v.setAdDesc(adDes); 
        v.setAdCreatedAt(adCreatedAt); 
        v.setAdPrice(adPrise); 
        v.setImglist(imgArray); 
        v.setAdCity(adcity); 
        catAddList.add(v); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      Log.e("ServiceHandler", "Couldn't get any data from the url"); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     cd.dismissdialog(); 
     adapter = new CateAdDisplayAdapter(getApplicationContext(), catAddList); 
     lsv.setAdapter(adapter); 
    } 
} 
+1

http://myurl.com/search?q=phone%206 일부 로그를하시기 바랍니다했습니다. – Amir

+0

네, 답장하겠습니다. – MenjeHer

답변

1

당신이 API를 호출하고 있습니다 가정 :

당신은 당신의 URL에 매개 변수를 인코딩해야한다.

String query = URLEncoder.encode("phone 6", "utf-8"); 
String url = "http://myurl.com/search?q=" + query; 

결과는 다음과 같습니다