Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getLoaderManager().initLoader在此回调中出错_Java_Android_Android Studio_Android Loadermanager_Android Loader - Fatal编程技术网

Java getLoaderManager().initLoader在此回调中出错

Java getLoaderManager().initLoader在此回调中出错,java,android,android-studio,android-loadermanager,android-loader,Java,Android,Android Studio,Android Loadermanager,Android Loader,这是我第一次使用Loader。调用方法之后 getLoaderManager().initLoader(0,null,this)我在参数“this”中得到一个错误 编译后出错: 错误:类LoaderManager中的方法initLoader无法应用于给定类型; getLoaderManager().initLoader(0,null,this); ^ 必需:int、Bundle、LoaderCallbacks 找到:int,,main活动 原因:无法推断类型变量D (参数不匹配;MainActi

这是我第一次使用Loader。调用方法之后

getLoaderManager().initLoader(0,null,this)我在参数“this”中得到一个错误

编译后出错:

错误:类LoaderManager中的方法initLoader无法应用于给定类型; getLoaderManager().initLoader(0,null,this); ^ 必需:int、Bundle、LoaderCallbacks 找到:int,,main活动 原因:无法推断类型变量D (参数不匹配;MainActivity无法转换为LoaderCallbacks) 其中D是类型变量: D扩展方法initLoader中声明的对象(int、Bundle、LoaderCallbacks)

我的代码:

package com.example.newsapp;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import java.util.ArrayList;
import java.util.List;




public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<News>> {

private static final String URL = "http://content.guardianapis.com/search";
private NewsAdapter newsAdapter;
private TextView emptyListStateTextView;
private Intent intent;
ListView newsListView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.e("MainActivity", "RUN onCreate...");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    newsListView = findViewById(R.id.listView);
    emptyListStateTextView = findViewById(R.id.defautView);
    newsListView.setEmptyView(emptyListStateTextView);

    newsAdapter = new NewsAdapter(this, new ArrayList<News>());
    newsListView.setAdapter(newsAdapter);

    newsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            News currentNews = newsAdapter.getItem(position);

            Uri uri = Uri.parse(currentNews.getUrl());

            intent= new Intent(Intent.ACTION_VIEW, uri);

            startActivity(intent);
        }
    });

    ConnectivityManager connMgr = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

    if (networkInfo == null) {
        View loadingIndicator = findViewById(R.id.loading_bar);
        loadingIndicator.setVisibility(View.GONE);

        emptyListStateTextView.setText("No internet connection");
    }else{

        getLoaderManager().initLoader(0, null, this);
    }
    Log.e("MainActivity", "DONE onCreate...");
}

@NonNull
@Override
public Loader<List<News>> onCreateLoader(int i, Bundle args) {
    Log.e("MainActivity", "RUN onCreateLoader...");

    //TEST
    Uri baseUri = Uri.parse(URL);
    Uri.Builder uriBuilder = baseUri.buildUpon();

    uriBuilder.appendQueryParameter("show-tags", "contributor");
    uriBuilder.appendQueryParameter("section", "technology");
    uriBuilder.appendQueryParameter("order-by", "newest");
    uriBuilder.appendQueryParameter("from-date", "2018-01-01");
    uriBuilder.appendQueryParameter("api-key", "test");

    Log.v("my_tag", "url created is: "+uriBuilder.toString());
    //TEST
    Log.e("MainActivity", "DONE onCreateLoader...");
    return new NewsLoader(this, uriBuilder.toString());
}

@Override
public void onLoadFinished(@NonNull Loader<List<News>> loader, List<News> data) {
    Log.e("MainActivity", "RUN onLoadFinished...");
    View loadingBar = findViewById(R.id.loading_bar);
    loadingBar.setVisibility(View.GONE);

    newsAdapter.clear();

    if(data != null && !data.isEmpty()){
        newsAdapter.addAll(data);
    }
    Log.e("MainActivity", "DONE onLoadFinished...");
}

@Override
public void onLoaderReset(@NonNull Loader<List<News>> loader) {
    Log.e("MainActivity", "RUN onLoaderReset...");
    newsAdapter.clear();
    Log.e("MainActivity", "DONE onLoaderReset...");
   }
}
package com.example.newsapp;
导入android.content.Context;
导入android.content.Intent;
导入android.net.ConnectivityManager;
导入android.net.NetworkInfo;
导入android.net.Uri;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ListView;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入androidx.loader.app.LoaderManager;
导入androidx.loader.content.loader;
导入java.util.ArrayList;
导入java.util.List;
公共类MainActivity扩展AppCompatActivity实现LoaderManager.LoaderCallbacks{
私有静态最终字符串URL=”http://content.guardianapis.com/search";
私有新闻适配器;
私有文本视图emptyListStateTextView;
私人意图;
ListView新闻ListView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
Log.e(“MainActivity”、“runonCreate…”);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
newsListView=findViewById(R.id.listView);
emptyListStateTextView=findViewById(R.id.defautView);
setEmptyView(emptyListStateTextView);
newsAdapter=新的newsAdapter(这是新的ArrayList());
setAdapter(newsAdapter);
newsListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
News currentNews=newsAdapter.getItem(位置);
Uri=Uri.parse(currentNews.getUrl());
意图=新意图(intent.ACTION\u视图,uri);
星触觉(意向);
}
});
ConnectivityManager connMgr=(ConnectivityManager)
getSystemService(Context.CONNECTIVITY\u服务);
NetworkInfo NetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo==null){
查看加载指示器=findViewById(R.id.loading\u bar);
加载indicator.setVisibility(View.GONE);
emptyListStateTextView.setText(“无互联网连接”);
}否则{
getLoaderManager().initLoader(0,null,this);
}
Log.e(“MainActivity”,“创建时完成…”);
}
@非空
@凌驾
公共加载器onCreateLoader(int i,Bundle args){
Log.e(“MainActivity”,“runonCreateLoader…”);
//试验
uribaseuri=Uri.parse(URL);
Uri.Builder-uriBuilder=baseUri.buildon();
appendQueryParameter(“显示标记”、“贡献者”);
uriBuilder.appendQueryParameter(“章节”、“技术”);
uriBuilder.appendQueryParameter(“订购人”、“最新”);
uriBuilder.appendQueryParameter(“自日期”、“2018-01-01”);
附录查询参数(“api键”、“测试”);
Log.v(“my_标记”,“创建的url为:”+uriBuilder.toString());
//试验
Log.e(“MainActivity”,“完成onCreateLoader…”);
返回新的新闻加载器(这个,uriBuilder.toString());
}
@凌驾
public void onLoadFinished(@NonNull加载程序,列表数据){
Log.e(“MainActivity”,“RunonLoadFinished…”);
查看加载条=findViewById(R.id.loading\u条);
loadingBar.setVisibility(View.GONE);
newsAdapter.clear();
if(data!=null&&!data.isEmpty()){
newsAdapter.addAll(数据);
}
Log.e(“main活动”、“加载完成时完成…”);
}
@凌驾
public void onLoaderReset(@NonNull加载程序){
Log.e(“MainActivity”,“RunonLoaderReset…”);
newsAdapter.clear();
Log.e(“MainActivity”,“DONE onLoaderReset…”);
}
}
我个人认为,问题一定出在进口的某个地方。即使我真的很感激任何帮助


谢谢大家!

getLoaderManager
已折旧,请使用
getSupportLoaderManager
如下:

getSupportLoaderManager().initLoader(0, null, this); 
但是,如果仍要使用此选项,则可能是由于导入不正确。导入加载程序回调,它应该可以解决问题

android.app.LoaderCallbacks

非常感谢你!这对我很有效:)