活动搜索崩溃

时间:2016-08-13 18:23:13

标签: android

大家好,我的搜索活动有问题。如果我尝试搜索一个项目例如(iphone 6)并只键入“iphone”或“6”或仅键入“i”和其他的...搜索工作上帝,但如果我把项目的整个名称这种情况:iphone 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 个答案:

答案 0 :(得分:1)

假设您正在进行api通话:

您应该在网址中对参数进行编码。

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

结果将是:http://myurl.com/search?q=phone%206