Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.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
Android 获取IndexOutOfBoundException:数组范围0到0无效,因此上下文=null,因此应用程序崩溃_Android_Android Asynctask_Interstitial - Fatal编程技术网

Android 获取IndexOutOfBoundException:数组范围0到0无效,因此上下文=null,因此应用程序崩溃

Android 获取IndexOutOfBoundException:数组范围0到0无效,因此上下文=null,因此应用程序崩溃,android,android-asynctask,interstitial,Android,Android Asynctask,Interstitial,正在进行间隙练习,单击按钮,调用tellJoke()。tellJoke()调用异步任务。 在AsyncTask中,参数大小为0,获取IndexOutfBundException,因此上下文为空。 MainActivity.java public class MainActivityFragment extends Fragment { InterstitialAd mInterstitialAd; public MainActivityFragment() { } @Over

正在进行间隙练习,单击按钮,调用tellJoke()。tellJoke()调用异步任务。 在AsyncTask中,参数大小为0,获取IndexOutfBundException,因此上下文为空。

MainActivity.java

 public class MainActivityFragment extends Fragment {

  InterstitialAd mInterstitialAd;

  public MainActivityFragment() {
  }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_main, container, false);

    AdView mAdView = (AdView) root.findViewById(R.id.adView);
            AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();
    mAdView.loadAd(adRequest);
    //interstitialAd part starts here
    mInterstitialAd = new InterstitialAd(getActivity());
    mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            requestNewInterstitial();
            MainActivity.tellJoke(getView());
        }
    });
    return root;
}

private void requestNewInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();

    mInterstitialAd.loadAd(adRequest);
 }
}
public class EndpointsAsyncTask extends AsyncTask<Context, Void, String> {

private static String LOG_TAG = EndpointsAsyncTask.class.getSimpleName();

private static MyApi myApiService = null;
private Context context ;

@Override
protected String doInBackground(Context... params) {

    if(myApiService == null) {  // Only do this once
        MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
                new AndroidJsonFactory(), null)
            .setRootUrl("https://build-it-bigger.appspot.com/_ah/api/");
        // end options for devappserver
        myApiService = builder.build();
    }       

    if (params != null) {
        context = params[0];
    }
    try {            
        return myApiService.fetchJoke().execute().getData();
    } catch (IOException e) {
        return e.getMessage();
    }
}

@Override
protected void onPostExecute(String result) {        
    if (context != null) {
        Intent intent = new Intent(context, JokeDisplayActivity.class);
        intent.putExtra(Intent.EXTRA_TEXT, result);
        context.startActivity(intent);
    }
}}
公共类MainActivity扩展了AppCompatActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(LOG_TAG, "after setting activity main");

}

 public static void tellJoke(View view){          
    new EndpointsAsyncTask().execute();
 }
}
MainActivityFragment.java

 public class MainActivityFragment extends Fragment {

  InterstitialAd mInterstitialAd;

  public MainActivityFragment() {
  }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_main, container, false);

    AdView mAdView = (AdView) root.findViewById(R.id.adView);
            AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();
    mAdView.loadAd(adRequest);
    //interstitialAd part starts here
    mInterstitialAd = new InterstitialAd(getActivity());
    mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            requestNewInterstitial();
            MainActivity.tellJoke(getView());
        }
    });
    return root;
}

private void requestNewInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();

    mInterstitialAd.loadAd(adRequest);
 }
}
public class EndpointsAsyncTask extends AsyncTask<Context, Void, String> {

private static String LOG_TAG = EndpointsAsyncTask.class.getSimpleName();

private static MyApi myApiService = null;
private Context context ;

@Override
protected String doInBackground(Context... params) {

    if(myApiService == null) {  // Only do this once
        MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
                new AndroidJsonFactory(), null)
            .setRootUrl("https://build-it-bigger.appspot.com/_ah/api/");
        // end options for devappserver
        myApiService = builder.build();
    }       

    if (params != null) {
        context = params[0];
    }
    try {            
        return myApiService.fetchJoke().execute().getData();
    } catch (IOException e) {
        return e.getMessage();
    }
}

@Override
protected void onPostExecute(String result) {        
    if (context != null) {
        Intent intent = new Intent(context, JokeDisplayActivity.class);
        intent.putExtra(Intent.EXTRA_TEXT, result);
        context.startActivity(intent);
    }
}}
EndpointsAsyncTask.java

 public class MainActivityFragment extends Fragment {

  InterstitialAd mInterstitialAd;

  public MainActivityFragment() {
  }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_main, container, false);

    AdView mAdView = (AdView) root.findViewById(R.id.adView);
            AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();
    mAdView.loadAd(adRequest);
    //interstitialAd part starts here
    mInterstitialAd = new InterstitialAd(getActivity());
    mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            requestNewInterstitial();
            MainActivity.tellJoke(getView());
        }
    });
    return root;
}

private void requestNewInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();

    mInterstitialAd.loadAd(adRequest);
 }
}
public class EndpointsAsyncTask extends AsyncTask<Context, Void, String> {

private static String LOG_TAG = EndpointsAsyncTask.class.getSimpleName();

private static MyApi myApiService = null;
private Context context ;

@Override
protected String doInBackground(Context... params) {

    if(myApiService == null) {  // Only do this once
        MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
                new AndroidJsonFactory(), null)
            .setRootUrl("https://build-it-bigger.appspot.com/_ah/api/");
        // end options for devappserver
        myApiService = builder.build();
    }       

    if (params != null) {
        context = params[0];
    }
    try {            
        return myApiService.fetchJoke().execute().getData();
    } catch (IOException e) {
        return e.getMessage();
    }
}

@Override
protected void onPostExecute(String result) {        
    if (context != null) {
        Intent intent = new Intent(context, JokeDisplayActivity.class);
        intent.putExtra(Intent.EXTRA_TEXT, result);
        context.startActivity(intent);
    }
}}
公共类EndpointsAsyncTask扩展异步任务{
私有静态字符串LOG_TAG=EndpointsAsyncTask.class.getSimpleName();
私有静态MyApi myApiService=null;
私人语境;
@凌驾
受保护字符串doInBackground(上下文…参数){
如果(myApiService==null){//只执行一次
MyApi.Builder=new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
新的AndroidJsonFactory(),null)
.setRootUrl(“https://build-it-bigger.appspot.com/_ah/api/");
//devappserver的结束选项
myApiService=builder.build();
}       
如果(参数!=null){
上下文=参数[0];
}
试试{
返回myApiService.fetchJoke().execute().getData();
}捕获(IOE异常){
返回e.getMessage();
}
}
@凌驾
受保护的void onPostExecute(字符串结果){
if(上下文!=null){
意向意向=新意向(上下文,JokeDisplayActivity.class);
intent.putExtra(intent.EXTRA_文本、结果);
背景。开始触觉(意图);
}
}}

请帮助,我哪里做错了?请建议是否有其他方法来执行此操作。

在调用
execute
时,只需提供AsyncTask的参数即可(同时删除static):

引用活动,因此实现了
上下文
接口(如果从活动调用)

编辑: 将
tellJoke
方法移动到片段并如下调用它:

tellJoke();

请注意,现在您没有传递
这个
,而是传递
getActivity()
,因为您在一个片段中。

params size是0,因为您没有传递任何参数…@njzk2谢谢。我需要在哪里传递参数?如果我喜欢,请指导-new EndpointsAsyncTask()。执行(此);从tellJoke()中删除静态关键字后),然后在MainActivityFragment中遇到问题,声明“非静态方法无法从静态上下文引用。请在此处进行指导。谢谢,但如果我传递此消息,则必须删除静态关键字。如果我删除此消息,则在MainActivityFragment中遇到问题,声明-“非静态无法从静态上下文引用”“.please help…”现在我再次遇到此错误并导致应用程序崩溃-“在android的父或祖先上下文中找不到方法(视图):视图类上定义的onClick属性”我只调用OnCutle XML中的TelPoice。在您的按钮上添加java代码中的“点击监听器”。它非常简单。它调用了 TelPooals<代码>。非常感谢。现在App工作得很好,但是MultILTALAD没有显示。请在这里指导我。没有问题。如果它修复了您原来的问题,请考虑接受答案。F或者广告没有显示,这是一个完全不同的事情,尝试谷歌一点或张贴一个新的问题,如果你无法解决它自己请…最好的问候,享受编码!