java - 当我尝试搜索名称中有空格的电影时,Http调用崩溃
问题描述
public class MainActivity extends AppCompatActivity implements
Response.Listener<JSONObject>,
Response.ErrorListener,
AdapterView.OnItemClickListener {
EditText movienameText;
Button getButton;
TextView yearText,genreText,titleText,plotText,nameText;
ListView moviesList;
private ResourceBundle response;
ArrayAdapter<String> adapter;
ArrayList<String>moviesname=new ArrayList<String>();
ArrayList<String>moviesyear=new ArrayList<String>();
ArrayList<String>moviesgenre=new ArrayList<String>();
ArrayList<String>moviesplot=new ArrayList<String>();
String x,plot,genre,year;
RequestQueue queue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
movienameText=findViewById(R.id.MovienameText);
getButton=findViewById(R.id.getButton);
moviesList=findViewById(R.id.moviesList);
moviesList.setOnItemClickListener(this);
adapter=newArrayAdapter<String(this,android.R.layout.
simple_list_item_1, moviesname);
}
public void get(View view) {
queue = Volley.newRequestQueue(this);
String url1="http://www.omdbapi.com
/?s="+movienameText.getText().toString()+"&apikey=1a382b30";
JsonObjectRequest request1=new
JsonObjectRequest(Request.Method.GET,url1,null,this,this);
queue.add(request1);
}
@Override
public void onResponse(JSONObject response) {
try {
for (int i = 0; i <response.getJSONArray("Search").length(); i++) {
if (i<response.getJSONArray("Search").length()){
moviesname.add(response.getJSONArray("Search").getJSONObject(i)
.getString("Title"));
}
else{
break;
}
}
moviesList.setAdapter(adapter);
year=response.getString("Year");
} catch (JSONException e) {
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
e.printStackTrace();
} }
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show(); }
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
year=response.getString("Year");
x = moviesList.getItemAtPosition(position).toString();
String url2="http://www.omdbapi.com
/?t="+moviesList.getItemAtPosition(position).toString().replace("
","")+"&apikey=1a382b30";
JsonObjectRequest request2=new
JsonObjectRequest(Request.Method.GET,url2,null,this,this);
queue.add(request2);
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setMessage(x).create().show();
builder.setMessage(year).create().show(); // builder.setMessage(genre).create().show(); // builder.setMessage(plot).create().show();
} }
当我输入带有两个单词的电影名称时(死硬)它进入错误方法,但我不知道为什么?............ ..................................................... ..................................................... ..................................................... ..................................................... ……
解决方案
可能你必须对你的 movienameText.getText() 进行编码。Http 链接不允许有空格。
试着做:
String url1 = TextUtils.htmlEncode("http://www.omdbapi.com/?s="+movienameText.getText().toString()+"&apikey=1a382b30");
推荐阅读
- c - 试图从我的输出中删除每个数字,就像一个直角三角形
- html - 我可以让 div 中的文本像按钮一样吗?我想在单击 div 时转换 y 4px
- sql - 查找最近正在更新(ing)/(ed)数据的表
- javascript - 在Javascript中使用两个字段对二维数组进行排序
- javascript - 当它们都不同时,相同的 id 和 class 出现在不同的 div 上
- ios - ImagePicker 没有提供退出图库的选项
- twilio - 如何在使用 Twilio Video API 时访问 webRTC 中的 RemoteParticipant 视频流
- dbt - 选择器未找到“dbt 测试”的节点
- r - 有没有办法在 R 中复制不同样本大小的函数?
- swift - Cloud Firestore .getDocuments 回调在 Swift5 上不起作用