0
我有一個ListView顯示從OMDBAPI搜索電影標題,當點擊搜索BTN我需要點擊兩次indstead一次。JSONParser到ListView需要雙重
請幫忙。
下面的代碼:
public class JSONParser extends AsyncTask<String, String, String> {
static ArrayList<String> movieList = new ArrayList<>();
@Override
protected String doInBackground(String... params) {
HttpURLConnection httpURLConnection = null;
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
URL url = new URL(params[0]);
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.connect();
InputStream stream = httpURLConnection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
String line = "";
while ((line = reader.readLine()) != null){
builder.append(line);
}
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if(httpURLConnection != null){
httpURLConnection.disconnect();
}
try {
if (reader != null){
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return "Failed Connection";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("Search");
StringBuilder stringBuilder = new StringBuilder();
for (int i = 1; i<jsonArray.length(); i++){
JSONObject finalJsonObject = jsonArray.getJSONObject(i);
String titleOfMovie = finalJsonObject.getString("Title");
movieList.add(titleOfMovie);
stringBuilder.append(movieList);
finalJsonObject.get("Title");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
這裏的mainActivivty:
public class Main2ActivityWeb extends AppCompatActivity {
EditText searchBar;
ListView listOfMovies;
Button searchBtn;
Button deleteBtn;
ArrayAdapter<String> arrayAdapter;
String url = "http://www.omdbapi.com/?s=";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2_activity_web);
searchBar = (EditText) findViewById(R.id.etsearch);
listOfMovies = (ListView) findViewById(R.id.lvMovies);
searchBtn = (Button) findViewById(R.id.btnSearch);
deleteBtn = (Button) findViewById(R.id.btnClear);
searchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
arrayAdapter = null;
final String search = url + searchBar.getText().toString();
new JSONParser().execute(search);
ArrayList<String> list = new ArrayList<>(JSONParser.movieList);
arrayAdapter = new ArrayAdapter<>(Main2ActivityWeb.this,
android.R.layout.simple_list_item_1, list);
listOfMovies.setAdapter(arrayAdapter);
if (arrayAdapter !=null){
JSONParser.movieList.clear();
}
}
});
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listOfMovies.setAdapter(null);
JSONParser.movieList.clear();
searchBar.setText("");
}
});
}
}
使用排的JSONObjectRequest。比使用AsyncTask容易得多。 –