2016-08-16 76 views
0

你好我所有的搜索活动进入我的应用程序,如果我尝试通过提示文本关键字来搜索一个项目,但如果我尝试搜索也包含一些应用程序崩溃的项目,例如,如果我尝试搜索文本“家庭”搜索很好,但如果我搜索“家3”应用程序崩溃。错误是:异常非法字符功能于查询在索引我想的是,搜索的工作也不错键入文字或文字+数字EXC .. 谢谢问题在我的活动

重要: 搜索活动调用一个URL编码,“ADSEARCH_URL”

public static final String ADSEARCH_URL="https://gjeme.com/apps/menjehere/index.php?action=searchAd&categoryId=%s&adcity=%s&q=%s"; 

这是搜索活动:

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); 
     } 
    } 
    } 
+0

您可以请发布textview的xml定义。 – sumandas

+0

问题是当他调用url时,url不能识别其他字符,命名为''illegal''。但我不知道如何使goddo编码的网址调用我要在我的ADSEARCH_URL上修改以获得文本的好回复或不是 – MenjeHer

+0

xml仅包含列表视图 – MenjeHer

回答

0

我觉得这是不是这里的字母数字字符的任何问题,但SPACE被创建一个,而您将文本添加到URL。
%20替换搜索关键字space(es),希望你会发现它很好。

+0

您的意思是添加此https:/ /gjeme.com/apps/menjehere/index.php?action=searchAd&categoryId=%s&adcity=%s&q=%s%20 – MenjeHer

+0

不,我的意思是确保URL没有任何空格字符。像'https://gjeme.com/apps/menjehere/index.php?action=searchAd 3&categoryId =%s&adcity =%s&q =%s%20'这里我们在searchAd&3之间有空格,这会抛出非法的异常。所以你所要做的就是用'%20'替换这个空格字符 – samirk433