Java 在doInBackground中使用OkHttpClient时,应用程序崩溃
我在Android棒棒糖上的应用程序运行良好,但在较低版本中,程序crashe显示此错误: 捕获异常 java.lang.RuntimeException:执行doInBackground()时出错 并指向这行代码:Java 在doInBackground中使用OkHttpClient时,应用程序崩溃,java,android,okhttp,Java,Android,Okhttp,我在Android棒棒糖上的应用程序运行良好,但在较低版本中,程序crashe显示此错误: 捕获异常 java.lang.RuntimeException:执行doInBackground()时出错 并指向这行代码: OkHttpClient client = new OkHttpClient(); 这是我的代码: private void getMoviesFromDBz(int id) { AsyncTask<Integer, Void, Void> asyncTas
OkHttpClient client = new OkHttpClient();
这是我的代码:
private void getMoviesFromDBz(int id) {
AsyncTask<Integer, Void, Void> asyncTask = new AsyncTask<Integer, Void, Void>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Integer... movieIds) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(linkkk + movieIds[0])
.build();
try {
Response response = client.newCall(request).execute();
JSONArray array = new JSONArray(response.body().string());
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
Movie movie = new Movie(object.getInt("id") , object.getString("per") , object.getString("movie_name"),
object.getString("movie_image"), object.getString("movie_genre") , object.getString("movie_discription") , object.getString("movie_lat"), object.getString("movie_lon") , object.getString("movie_marker") , object.getString("sort") , object.getString("price") , object.getString("email") , object.getString("tell") , object.getString("location") , object.getString("count"));
ItemOneFragment.this.movies2.add(movie);
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
adapter2.notifyDataSetChanged();
getMoviesFromDB(0);
}
};
asyncTask.execute(id);
scroll2 = 1;
}
private void getMoviesFromDBz(int-id){
AsyncTask AsyncTask=新建AsyncTask(){
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(整数…电影ID){
OkHttpClient=新的OkHttpClient();
Request Request=newrequest.Builder()
.url(linkkk+movieIds[0])
.build();
试一试{
Response=client.newCall(request.execute();
JSONArray数组=新的JSONArray(response.body().string());
对于(int i=0;i
您试图在后台线程中访问主/UI线程:
ItemOneFragment.this.movies2.add(电影)代码>
只需返回movie
对象并在onPostExecute()
方法上执行上述行,我也不建议为每个请求实例化OkHttpClient
。您正在尝试访问后台线程中的主/UI线程:
ItemOneFragment.this.movies2.add(电影)代码>
只需返回movie
对象并在onPostExecute()
方法上执行上述行,我也不建议为每个请求实例化OkHttpClient
。您正试图从后台线程对UI线程执行操作。因此,您可以使用runonuithread
runOnUiThread(new Runnable() {
@Override
public void run() {
ItemOneFragment.this.movies2.add(movie);
}
});
请参阅下面代码中的更改
@Override
protected Void doInBackground(Integer... movieIds) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(linkkk + movieIds[0])
.build();
try {
Response response = client.newCall(request).execute();
JSONArray array = new JSONArray(response.body().string());
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
Movie movie = new Movie(object.getInt("id") , object.getString("per") , object.getString("movie_name"),
object.getString("movie_image"), object.getString("movie_genre") , object.getString("movie_discription") , object.getString("movie_lat"), object.getString("movie_lon") , object.getString("movie_marker") , object.getString("sort") , object.getString("price") , object.getString("email") , object.getString("tell") , object.getString("location") , object.getString("count"));
runOnUiThread(new Runnable() {
@Override
public void run() {
ItemOneFragment.this.movies2.add(movie);
}
});
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@覆盖
受保护的Void doInBackground(整数…电影ID){
OkHttpClient=新的OkHttpClient();
Request Request=newrequest.Builder()
.url(linkkk+movieIds[0])
.build();
试一试{
Response=client.newCall(request.execute();
JSONArray数组=新的JSONArray(response.body().string());
对于(int i=0;i
我认为这可能会解决您的问题。您正在尝试从后台线程对UI线程执行操作。因此,您可以使用runonuithread
runOnUiThread(new Runnable() {
@Override
public void run() {
ItemOneFragment.this.movies2.add(movie);
}
});
请参阅下面代码中的更改
@Override
protected Void doInBackground(Integer... movieIds) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(linkkk + movieIds[0])
.build();
try {
Response response = client.newCall(request).execute();
JSONArray array = new JSONArray(response.body().string());
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
Movie movie = new Movie(object.getInt("id") , object.getString("per") , object.getString("movie_name"),
object.getString("movie_image"), object.getString("movie_genre") , object.getString("movie_discription") , object.getString("movie_lat"), object.getString("movie_lon") , object.getString("movie_marker") , object.getString("sort") , object.getString("price") , object.getString("email") , object.getString("tell") , object.getString("location") , object.getString("count"));
runOnUiThread(new Runnable() {
@Override
public void run() {
ItemOneFragment.this.movies2.add(movie);
}
});
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@覆盖
受保护的Void doInBackground(整数…电影ID){
OkHttpClient=新的OkHttpClient();
Request Request=newrequest.Builder()
.url(linkkk+movieIds[0])
.build();
试一试{
Response=client.newCall(request.execute();
JSONArray数组=新的JSONArray(response.body().string());
对于(int i=0;i