2016-08-13 14 views
0

こんにちは、私は検索活動に問題があります。私が例えばiphone 6のようなアイテムを検索し、 "iphone"か "6"か "i"と他のexcだけを入力しようとすると...検索は神を働かせますが、アイテムの全体の名前をこの場合: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

は、いくつかのログをしてください置きます。 – Amir

+0

はい私はそれを入れてみましょう – MenjeHer

答えて

1

あなたはAPI呼び出しを行っていると仮定:

あなたのURLにパラメータをエンコードする必要があります。

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

結果は次のようになります。http://myurl.com/search?q=phone%206

関連する問題