2017-08-07 48 views
-1

以下是我主要活动的代码。我正在使用改造创建项目,但在运行时强行关闭

我使用Retrofit从电影数据库API调用数据,但是当我运行它时,它已安装但强制关闭。我想知道错误的哪个部分,这是我主要活动的代码。

public class MainActivity extends AppCompatActivity { 

    CustomAdapter adapter; 
    RecyclerView mrecyclerview; 
    List<Result> resultList = new ArrayList<>(); 
    RecyclerView.LayoutManager layoutmanager; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mrecyclerview= (RecyclerView) findViewById(R.id.recyclerview); 
     layoutmanager = new LinearLayoutManager(this); 
     adapter = new CustomAdapter(resultList); 
     mrecyclerview.setAdapter(adapter); 
     mrecyclerview.setLayoutManager(new GridLayoutManager(MainActivity.this,2)); 
     new RequestMovie().execute("popular"); 
    } 
    @Override 
    public boolean onCreateOptionsMenu (Menu menu){ 
     getMenuInflater().inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId()== R.id.action_popular){ 
      new RequestMovie().execute("popular"); 
     } else if (item.getItemId()==R.id.action_top_rated){ 
      new RequestMovie().execute("top_rated"); 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private class RequestMovie extends AsyncTask<String,Void,Void>{ 
     @Override 
     protected Void doInBackground(String... params) { 
      String kategori = params[0]; 
      if (kategori.equals("popular")){ 
       ApiInterface apiInterface = ApiClient.getRetrofit() 
         .create(ApiInterface.class); 
       Call <EldarMovie> call = apiInterface.getPopular(); 
       call.enqueue(new Callback<EldarMovie>() { 
        @Override 
        public void onResponse(Call<EldarMovie> call, Response<EldarMovie> response) { 
         EldarMovie movie=response.body(); 
         adapter.setData(movie.getResults()); 
        } 

        @Override 
        public void onFailure(Call<EldarMovie> call, Throwable t) { 

        } 
       }); 


      } 
      return null; 
     } 
    } 
} 

从我的应用程序强制关闭的代码有什么不对吗?

+0

首先,你为什么使用asyncTask,改造使用线程本身,你不需要asynctask –

+0

请添加你的崩溃日志 –

+0

添加logcat报告,为什么你使用asyncTask –

回答

0

如果您在Retrofit中使用带响应和失败回调的enqueue,那么不需要将它放入AsyncTask中,因为它们已经是异步的。

您可以在这里参考Call method in Retrofit

如果它坠毁,请看看LogCat并在此处发布。用LogCat跟踪错误更好。