2017-12-18 368 views
0

我將用戶輸入編碼到一個單一的URL,我使用Uri.encode但錯誤響應仍然是400.如何使編碼工作?android - 用戶輸入的URL編碼

的結果是,「空間」被替換爲「%20」,但響應仍然失敗

這是我的代碼,

public void OnQuerySubmit() { 
    searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      String UrlEncode = AppConfig.URL_GETJOBS + Uri.encode(query); 
      progressDialog.setMessage("Mencari..."); 
      showDialog(); 
      jobList.clear(); 
      getJobs(UrlEncode); 
      homeRecyclerViewAdapter.notifyDataSetChanged(); 
      hideDialog(); 
      return false; 
     } 
    }); 
} 

public List<Job> getJobs(String urlGetjobs) { 
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlGetjobs, null, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      Log.d(TAG, "onResponse: " + response.toString()); 
      try { 

       boolean error = response.getBoolean("error"); 

       if(!error) { 
        JSONArray transaksiArray = response.getJSONArray("transaksi"); 
        for(int i = 0; i < transaksiArray.length(); i++) { 
       JSONObject seluruhTrans = transaksiArray.getJSONObject(i); 

       Job job = new Job(); 
       job.setTitle(seluruhTrans.getString("title")); 
       job.setNamaPerusahaan(seluruhTrans.getString("nama_perusahaan")); 
       job.setLokasi(seluruhTrans.getString("lokasi")); 
       job.setKriteria_1(seluruhTrans.getString("kriteria_1")); 
       job.setKriteria_2(seluruhTrans.getString("kriteria_2")); 
       job.setKriteria_3(seluruhTrans.getString("kriteria_3")); 
       job.setGaji(seluruhTrans.getString("gaji")); 
       job.setImg_logo(seluruhTrans.getString("img_logo")); 
       job.setTanggal(seluruhTrans.getString("tanggal")); 
       job.setId_post(seluruhTrans.getString("id_post")); 

       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putString("title", job.getTitle()); 
       editor.putString("nama_perusahaan", job.getNamaPerusahaan()); 
       editor.putString("lokasi", job.getLokasi()); 
       editor.putString("kriteria_1", job.getKriteria_1()); 
       editor.putString("kriteria_2", job.getKriteria_2()); 
       editor.putString("kriteria_3", job.getKriteria_3()); 
       editor.putString("gaji", job.getGaji()); 
       editor.putString("img_logo", job.getImg_logo()); 
       editor.putString("tanggal", job.getTanggal()); 
       editor.putString("id_post", job.getId_post()); 
       editor.commit(); 

       jobList.add(job); 
         } 
       } 
       homeRecyclerViewAdapter.notifyDataSetChanged(); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     if (error instanceof NoConnectionError || error instanceof TimeoutError || error instanceof NoConnectionError){ 
      Toast.makeText(getActivity(), "Please Check your Connection!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
    }); 
    AppController.getInstance().addToRequestQueue(jsonObjectRequest); 
    return jobList; 
} 

任何幫助,將不勝感激。

+0

哪裏是你的代碼?你需要檢查你的編碼網址是否有效,最好使用翻新或抽空。你不需要編碼你的網址。 –

+0

公共無效OnQuerySubmit(){ searchView.setOnQueryTextListener(新MaterialSearchView.OnQueryTextListener(){ @覆蓋 公共布爾onQueryTextSubmit(字符串查詢){ \t \t字符串以UrlEncode = AppConfig.URL_GETJOBS + Uri.encode(查詢); progressDialog .setMessage( 「Mencari ......」); 的ShowDialog(); jobList.clear(); getJobs(以UrlEncode); homeRecyclerViewAdapter.notifyDataSetChanged(); hideDialog(); 將返回false;} 附加 –

+0

這個代碼在你的問題上getJobs()方法代碼。 –

回答

0

修改代碼,這樣

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_home, container, false); 

    queue = Volley.newRequestQueue(getActivity()); 

    searchView = view.findViewById(R.id.search_view); 
    recyclerView = view.findViewById(R.id.recyclerview); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

    jobList = new ArrayList<>(); 

    homeRecyclerViewAdapter = new HomeRecyclerViewAdapter(getActivity(), jobList); 
    recyclerView.setAdapter(homeRecyclerViewAdapter); 
    getJobs(""); //get your data as it is 

    OnQuerySubmit(); 

    return view; 

} 

public void OnQuerySubmit() { 
    searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      getJobs(query); 
      return false; 
     } 
    }); 
} 

public void getJobs(final String query) { 
    StringRequest jsonObjectRequest = new StringRequest(Request.Method.GET, AppConfig.URL_GETJOBS, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "onResponse: " + response); 
      try { 
       JSONObject jsonObject=new JSONObject(response); 
       boolean error = jsonObject.getBoolean("error"); 
       if (!error) { 
        jobList.clear(); 
        JSONArray transaksiArray = jsonObject.JSONArray("transaksi"); 
         .... 
         .... 
         .... 
        jobList.add(job); 
        adapter.notifyDataSetChanged(); 
       } 
      } catch (JSONException e) { 

      } 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(Tag, error.toString()); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> map = new HashMap<>(); 
      if(!TextUtils.isEmpty(query){ 
       map.put("title", query); 
      }else{} 
      return map; 
     } 
    }; 
    AppController.getInstance().addToRequestQueue(jsonObjectRequest); 
} 
+0

這工作,但我有一個recyclerview數據數組。對不起,我忘了url/searchAll /(獲取所有內容)和/ searchAll /:title(通過輸入獲取)的名稱,所以我想在公共列表工作的recyclerview旁邊,我也想使用getJobs方法獲取所有recyclerview標題 –

+0

@穆罕默德Imanudin對不起兄弟,但我不明白你想說什麼? –

+0

我在arraylist上有recyclerview數據。 API我首先設計了從服務器URL獲得所有列表數據:(/ searchAll),其次我想根據用戶輸入的標題使用API​​ URL:(/ searchAll /:title)獲取數據列表。所以我想使用getJobs(query)方法,然後recyclerview會得到用戶想要的。如果是這樣,我應該再次創建getJobs()方法嗎? 對不起,如果非常複雜, –

0
package com.mimdudin.carekkerje.Activities; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import com.android.volley.NoConnectionError; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.TimeoutError; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 
import com.miguelcatalan.materialsearchview.MaterialSearchView; 
import com.mimdudin.carekkerje.Adapter.HomeRecyclerViewAdapter; 
import com.mimdudin.carekkerje.Helper.AppController; 
import com.mimdudin.carekkerje.Model.Job; 
import com.mimdudin.carekkerje.R; 
import com.mimdudin.carekkerje.Util.AppConfig; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.net.URLEncoder; 
import java.util.ArrayList; 
import java.util.List; 

import static com.android.volley.VolleyLog.TAG; 

/** 
* A simple {@link Fragment} subclass. 
*/ 
public class HomeFragment extends Fragment { 

    private RecyclerView recyclerView; 
    private HomeRecyclerViewAdapter homeRecyclerViewAdapter; 
    private List<Job> jobList; 
    private RequestQueue queue; 
    private MaterialSearchView searchView; 
    private ProgressDialog progressDialog; 
    private SharedPreferences sharedPreferences; 
    public HomeFragment() { 
     // Required empty public constructor 

    } 

    public static HomeFragment newInstance() { 
    HomeFragment homeFragment = new HomeFragment(); 
     return homeFragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_home, container, false); 

     queue = Volley.newRequestQueue(getActivity()); 

     searchView = view.findViewById(R.id.search_view); 
     recyclerView = view.findViewById(R.id.recyclerview); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

     jobList = new ArrayList<>(); 
     jobList = getJobs(AppConfig.URL_GETJOBS); 

     homeRecyclerViewAdapter = new HomeRecyclerViewAdapter(getActivity(), jobList); 
     recyclerView.setAdapter(homeRecyclerViewAdapter); 
     homeRecyclerViewAdapter.notifyDataSetChanged(); 

     sharedPreferences = getActivity().getSharedPreferences("data", Context.MODE_PRIVATE); 


     progressDialog = new ProgressDialog(getContext()); 
     progressDialog.setCancelable(false); 
     OnQuerySubmit(); 

     return view; 

    } 


    public void OnQuerySubmit(){ 
     searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       String UrlEncode = AppConfig.URL_GETJOBS + Uri.encode(query); 
       progressDialog.setMessage("Mencari..."); 
       showDialog(); 

       jobList.clear(); 
       getJobs(UrlEncode); 
       homeRecyclerViewAdapter.notifyDataSetChanged(); 
       hideDialog(); 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       return false; 
      } 
     }); 
    } 

    public List<Job> getJobs(String urlGetjobs) { 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlGetjobs, null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       Log.d(TAG, "onResponse: " + response.toString()); 
       try { 

        boolean error = response.getBoolean("error"); 

        if(!error) { 
         JSONArray transaksiArray = response.getJSONArray("transaksi"); 
        for(int i = 0; i < transaksiArray.length(); i++) { 
         JSONObject seluruhTrans = transaksiArray.getJSONObject(i); 

         Job job = new Job(); 
         job.setTitle(seluruhTrans.getString("title")); 
         job.setNamaPerusahaan(seluruhTrans.getString("nama_perusahaan")); 
         job.setLokasi(seluruhTrans.getString("lokasi")); 
         job.setKriteria_1(seluruhTrans.getString("kriteria_1")); 
         job.setKriteria_2(seluruhTrans.getString("kriteria_2")); 
         job.setKriteria_3(seluruhTrans.getString("kriteria_3")); 
         job.setGaji(seluruhTrans.getString("gaji")); 
         job.setImg_logo(seluruhTrans.getString("img_logo")); 
         job.setTanggal(seluruhTrans.getString("tanggal")); 
         job.setId_post(seluruhTrans.getString("id_post")); 

         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         editor.putString("title", job.getTitle()); 
         editor.putString("nama_perusahaan", job.getNamaPerusahaan()); 
         editor.putString("lokasi", job.getLokasi()); 
         editor.putString("kriteria_1", job.getKriteria_1()); 
         editor.putString("kriteria_2", job.getKriteria_2()); 
         editor.putString("kriteria_3", job.getKriteria_3()); 
         editor.putString("gaji", job.getGaji()); 
         editor.putString("img_logo", job.getImg_logo()); 
         editor.putString("tanggal", job.getTanggal()); 
         editor.putString("id_post", job.getId_post()); 
         editor.commit(); 

         jobList.add(job); 
         } 
        } 
        homeRecyclerViewAdapter.notifyDataSetChanged(); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
        Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       if (error instanceof NoConnectionError || error instanceof TimeoutError || error instanceof NoConnectionError){ 
        Toast.makeText(getActivity(), "Please Check your Connection!", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
     AppController.getInstance().addToRequestQueue(jsonObjectRequest); 
     return jobList; 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu_main, menu); 
     MenuItem item = menu.findItem(R.id.action_search); 
     searchView.setMenuItem(item); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 



    public void showDialog() { 
     if (!progressDialog.isShowing()) { 
      progressDialog.show(); 
     } 
    } 
    public void hideDialog(){ 
     if (progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
     } 
    } 
    } 






HomeRecyclerviewAdapter.java 

package com.mimdudin.carekkerje.Adapter; 

import android.app.FragmentManager; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.request.RequestOptions; 
import com.mimdudin.carekkerje.Activities.HomeFragment; 
import com.mimdudin.carekkerje.Activities.HomeFragmentDetail; 
import com.mimdudin.carekkerje.Model.Job; 
import com.mimdudin.carekkerje.R; 

import java.util.List; 

/** 
* Created by master on 12/12/17. 
*/ 

public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerViewAdapter.ViewHolder> { 

    private Context context; 
    private List<Job> jobList; 

    public HomeRecyclerViewAdapter(Context context, List<Job> jobs){ 
     this.context = context; 
     jobList = jobs; 
    } 

    @Override 
    public HomeRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.home_row, parent, false); 

     return new ViewHolder(view, context); 
    } 

    @Override 
    public void onBindViewHolder(HomeRecyclerViewAdapter.ViewHolder holder, int position) { 
    Job job = jobList.get(position); 

    holder.title.setText(job.getTitle()); 
    holder.namaPerusahaan.setText(job.getNamaPerusahaan()); 
    holder.kriteria_1.setText(job.getKriteria_1()); 
    holder.kriteria_2.setText(job.getKriteria_2()); 
    holder.kriteria_3.setText(job.getKriteria_3()); 
    holder.gaji.setText(job.getGaji()); 
    holder.lokasi.setText(job.getLokasi()); 
    holder.tanggal.setText(job.getTanggal()); 

    String img_logoLink = job.getImg_logo(); 
     Glide.with(context) 
       .load(img_logoLink) // URL 
       .apply(new RequestOptions().placeholder(android.R.drawable.ic_dialog_info) 
           .error(android.R.drawable.ic_dialog_alert).centerCrop().dontAnimate() 
//       .centerCrop(), .crossFade(), .thumbnail(), .dontAnimate(), .dontTransform() BitmapTransformation(.circleCrop()) 
       ) 
       .into(holder.img_logo); //TARGET GAMBAR YANG NAK DIUBAH 

    } 

    @Override 
    public int getItemCount() { 
     return jobList.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder{ 

     TextView title; 
     TextView namaPerusahaan; 
     TextView lokasi; 
     TextView kriteria_1; 
     TextView kriteria_2; 
     TextView kriteria_3; 
     TextView gaji; 
     ImageView img_logo; 
     TextView tanggal; 


     public ViewHolder(final View itemView, final Context ctx) { 
      super(itemView); 
      context = ctx; 
      title = itemView.findViewById(R.id.titleID); 
      namaPerusahaan = itemView.findViewById(R.id.namaPerusahaanID); 
      kriteria_1 = itemView.findViewById(R.id.satuTv); 
      kriteria_2 = itemView.findViewById(R.id.duaTv); 
      kriteria_3 = itemView.findViewById(R.id.tigaTv); 
      gaji = itemView.findViewById(R.id.gajiID); 
      lokasi = itemView.findViewById(R.id.lokasiID); 
      img_logo = itemView.findViewById(R.id.img_logoID); 
      tanggal = itemView.findViewById(R.id.tanggalID); 

      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        HomeFragmentDetail fragmentDetail = new HomeFragmentDetail(); 
        Bundle bundle = new Bundle(); 
        Job job = jobList.get(getAdapterPosition()); 
        bundle.putSerializable("job", job); 
        fragmentDetail.setArguments(bundle); 

        AppCompatActivity activity = (AppCompatActivity) itemView.getContext(); 

        android.support.v4.app.FragmentManager fragmentManager = activity.getSupportFragmentManager(); 
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction().addToBackStack(null); 
        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
        fragmentTransaction.replace(R.id.frame_fragmenthome, fragmentDetail); 
        fragmentTransaction.commit(); 

////     Intent intent = new Intent(context, HomeDetailActivity.class); 
////     intent.putExtra("job", job); 
////     ctx.startActivity(intent); 

       } 
      }); 
     } 
    } 
} 

HomeFragmentDetail.java 
package com.mimdudin.carekkerje.Activities; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.mimdudin.carekkerje.Model.Job; 
import com.mimdudin.carekkerje.R; 

/** 
* A simple {@link Fragment} subclass. 
* Activities that contain this fragment must implement the 
* to handle interaction events. 
*/ 
public class HomeFragmentDetail extends Fragment { 

    private TextView tvDeskripsi; 
    private TextView tvIndustri; 

    public HomeFragmentDetail() { 
     // Required empty public constructor 
    } 

    public static HomeFragmentDetail newInstance(){ 
     HomeFragmentDetail homeFragmentDetail = new HomeFragmentDetail(); 
     return homeFragmentDetail; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_home_fragment_detail, container, false); 
     tvDeskripsi = view.findViewById(R.id.tvDeskripsi); 
     tvIndustri = view.findViewById(R.id.tvIndustri); 

     Bundle bundle = getArguments(); 
     Job job = (Job) bundle.getSerializable("job"); 

     String PostID = job.getId_post(); 
     String titleID = job.getTitle(); 

     tvDeskripsi.setText(PostID); 
     tvIndustri.setText(titleID); 

     return view; 


// DataHolder dataholder=new DataHolder("1","TestName"); 
// Bundle bundle=new Bundle(); 
// bundle.putSerializable("obj",dataholder); 

// Fragment fragment=new FragmentB(); 
// fragment.setArguments(bundle); 
// fragmentManager = getActivity(). getSupportFragmentManager(); 
// fragmentTransaction = fragmentManager .beginTransaction(); 
// fragmentTransaction.add(R.id.container, fragment); 
// fragmentTransaction.commit(); 

     //Job job = (Job) getIntent.getSerializableExtra("job"); 

//  Bundle bundle = getArguments(); 
//  Job job = (Job) bundle.getSerializable("job"); 
//  String jobID = job.getId_post(); 
//  String titleID = job.getTitle(); 



    } 

} 

AppConfig.java 

package com.mimdudin.carekkerje.Util; 

/** 
* Created by master on 10/12/17. 
*/ 

public class AppConfig { 

    public static final String URL = "http://192.168.43.142/Carekkerje/v1"; 
    public static final String URL_REGISTER = URL + "/daftarUser"; 
    public static final String URL_LOGIN = URL + "/loginUser"; 
    public static final String URL_GETJOBS = URL + "/seluruhLowongan/"; 
    public static final String URL_GETJOBSS = URL + "/seluruhLowongan/:title"; 

}