首页 > 解决方案 > 当我尝试搜索名称中有空格的电影时,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();    

} }

当我输入带有两个单词的电影名称时(死硬)它进入错误方法,但我不知道为什么?............ ..................................................... ..................................................... ..................................................... ..................................................... ……

标签: javaandroidarraysjson

解决方案


可能你必须对你的 movienameText.getText() 进行编码。Http 链接不允许有空格。

试着做:

String url1 = TextUtils.htmlEncode("http://www.omdbapi.com/?s="+movienameText.getText().toString()+"&apikey=1a382b30");

推荐阅读