Ich habe eine ListView, die den gesuchten Titel des Films von OMDBAPI zeigt und wenn Sie auf die Suche btn klicken, muss ich zweimal anstelle von einmal klicken.JSONParser zu ListView brauchen doppelte
Bitte Hilfe.
Hier ist der Code:
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();
}
}
}
Hier ist der 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("");
}
});
}
}
Verwenden Volley des JSONObjectRequest. Viel einfacher als die Verwendung einer AsyncTask. –