我正在编写一个应用程序,该应用程序通过接收Json文件的API来显示票房的rrank,如果我评论有关回收器view
的代码,一切都可以正常工作。适配器代码很好,我猜想如果没有,日志是这样的:
08-03 09:53:59.915 8189-8189/kr.ac.mju.mju_alimi E/RecyclerView: No adapter attached; skipping layout
08-03 09:54:00.351 8189-8189/kr.ac.mju.mju_alimi E/AndroidRuntime: FATAL EXCEPTION: main
Process: kr.ac.mju.mju_alimi, PID: 8189
java.lang.NullPointerException: Attempt to get length of null array
at kr.ac.mju.mju_alimi.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:152)
at kr.ac.mju.mju_alimi.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:97)
我认为代码的顺序是错误的,但不知道确切的...主要活动.java是:
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
TextView tv_result;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
ArrayList<MovieItem> itemArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//array list
itemArrayList = new ArrayList<>(); //데이터
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(mLayoutManager);
// tv_result = (TextView) findViewById(R.id.tv_result);
// tv_result.setMovementMethod(new ScrollingMovementMethod()); //스크롤기능 추가하기
MyAsyncTask mProcessTask = new MyAsyncTask();
mProcessTask.execute();
android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.findViewById(R.id.menu).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu pop = new PopupMenu(MainActivity.this, v);
pop.getMenuInflater().inflate(R.menu.menu, pop.getMenu());
pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
});
pop.show();
}
});
ImageButton b = (ImageButton) findViewById(R.id.bell);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Pop.class));
}
});
}
//AsyncTask 생성 - 모든 네트워크 로직을 여기서 작성해 준다.
public class MyAsyncTask extends AsyncTask<String, Void, MovieItem[]> {
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
//OkHttp 객체생성
OkHttpClient client = new OkHttpClient();
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("\t로딩중...");
//show dialog
progressDialog.show();
}
@Override
protected MovieItem[] doInBackground(String... params) {
HttpUrl.Builder urlBuilder = HttpUrl.parse("http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json").newBuilder();
urlBuilder.addQueryParameter("key","430156241533f1d058c603178cc3ca0e");
urlBuilder.addQueryParameter("targetDt","20170908");
String url = urlBuilder.build().toString();
Request request = new Request.Builder()
.url(url)
.build();
try {
Response response = client.newCall(request).execute();
Gson gson = new GsonBuilder().create();
JsonParser parser = new JsonParser();
JsonElement rootObject = parser.parse(response.body().charStream())
.getAsJsonObject().get("boxOfficeResult").getAsJsonObject().get("dailyBoxOfficeList");
MovieItem[] posts = gson.fromJson(rootObject, MovieItem[].class);
return posts;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(MovieItem[] result) {
super.onPostExecute(result);
progressDialog.dismiss();
if(result.length > 0){
for (MovieItem post: result){
itemArrayList.add(post);
}
}
mAdapter = new Adapter(itemArrayList);
mRecyclerView.setAdapter(mAdapter);
}
}
}
您在调用异步任务后设置适配器。这意味着,每次调用异步任务时,回收器视图的适配器都会发生变化。这是不必要的,因为您只使用一个适配器。最好的方法是在创建时初始化适配器,然后当您更改了列表的值时,通知适配器它的数据集已经更改。TL;速度三角形定位法(dead reckoning)
将此代码移动到您的创建时:
mAdapter = new Adapter(itemArrayList);
mRecyclerView.setAdapter(mAdapter);
并从代码最初所在的位置替换它(P. S.使用智能感知来确定这是否是正确的功能,关键字是通知、数据集和更改):
mAdapter.notifyDataSetChanged()
当应用程序启动时,我得到一个空白屏幕,当我检查日志时,我得到:E/回收人员视图:没有连接适配器;跳过布局错误 我不知道为什么?任何想法,它似乎没有附加回收器视图或添加任何数据,我附加了Main活动、DataAdapter和数据类。 主要活动 数据适配器 下面是我的数据类,将从中提取数据 我ncluded.java 收集器和设置器 这是jsonResponse类,在接口中引用 感谢任何帮助。
我制作了一个基本的购物清单应用程序,它利用回收器视图来显示列表项目。我正在尝试使用带有片段的导航添加设置屏幕。我遇到了我的回收器视图的问题 主活动.kt HomeFragment.kt 设置Fragment.kt activity_main.xml fragment\u home.xml navigation.xml 不确定是否需要更多信息。提前道歉-我是android studio的新手
我已经创建了一个片段,在该片段中有一个recycle view,但是当我的片段被加载时,什么也没有显示,它给出了这个错误“E/recycle view:没有连接适配器;跳过布局”。下面是适配器和片段类的代码,任何帮助都将不胜感激 适配器类: 片段类: fragment _ view _ all _ my _ recipes . XML view_all_recipe_item.xml
一切正常,但数据没有显示。 但是当我签入“logcat”时,我发现了这个错误消息: 2021 10月20日11:29:37.387 7327-7327/com。实例myplay E/RecyclerView:未连接适配器;跳过布局 2021-10-20 11:29:37.388 7327-7327/com.example.myplayE/RecyClerView:未连接适配器;跳过布局 主要活动。
大家晚上好,我一直在寻找一个解决方案,以解决android studio的日志发送错误,使用RecyclerView显示JSON“产品”列表,并进行了改装。 我已经阅读了与此错误相关的问题,但我无法找到符合我需求的正确答案。 Android:回收人员视图:没有附加适配器;跳过布局 未连接适配器;跳过布局回收视图错误 recyclerview未连接适配器;跳过布局 未连接适配器;跳过布局onCrea
它给了我“回收站视图:没有连接适配器;跳过布局“错误,但在我看来适配器已正确连接。请帮忙。 我正在移动我的方法,但它不起作用。我在这里寻找答案,但只有错误实现的适配器存在问题。我不知道这里出了什么问题。