NeoVe
NeoVe

Reputation: 3897

Could not find class 'EndpointsAsyncTask$1', referenced from method EndpointsAsyncTask.xxx - Anonymous function

I'm struggling from two days now with this issue, I can't understand why is this happening, I have this EndpointAsyncTask java class on my Android Project (I'm using android Studio 1.2.2):

package com.kkoci.shairlook;

/**
* Created by kristian on 02/07/2015.
*/
import android.content.Context;
import android.os.AsyncTask;
import android.util.Pair;
import android.widget.Toast;

import com.appspot.shairlook1.userEndpoint.UserEndpoint;
import com.appspot.shairlook1.userEndpoint.model.User;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
import com.google.api.client.googleapis.services.GoogleClientRequestInitializer;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

public class EndpointsAsyncTask extends AsyncTask<Void, Void, List<User>> implements GoogleClientRequestInitializer{
private static UserEndpoint myApiService = null;
private Context context;

EndpointsAsyncTask(Context context) {
    this.context = context;
}

@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {

}

class MyClass{}


@Override
protected List<User> doInBackground(Void... params) {
    if(myApiService == null) { // Only do this once
        UserEndpoint.Builder builder =  new UserEndpoint.Builder(AndroidHttp.newCompatibleTransport(),
                new AndroidJsonFactory(), null)
// options for running against local devappserver
// - 10.0.2.2 is localhost's IP address in Android emulator
// - turn off compression when running against local devappserver
                .setRootUrl("http://localhost:8080/_ah/api/")
                .setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
                    @Override
                    public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
                          abstractGoogleClientRequest.setDisableGZipContent(true);
                    }
                });
// end options for devappserver

        myApiService = builder.build();
    }

    try {
        return myApiService.listUser().execute().getItems();
    } catch (IOException e) {
        return Collections.EMPTY_LIST;
    }
}

@Override
protected void onPostExecute(List<User> result) {
    for (User q : result) {
        Toast.makeText(context, q.getWho() + " : " + q.getWhat(), Toast.LENGTH_LONG).show();
    }
}
}

And I call this method from an Activity, like this:

package com.kkoci.shairlook;

import android.app.Activity;
//import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.database.SQLException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.view.LayoutInflater;

import com.appspot.shairlook1.userEndpoint.UserEndpoint;
import com.appspot.shairlook1.userEndpoint.model.User;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
import com.google.api.client.googleapis.services.GoogleClientRequestInitializer;
import com.kkoci.shairlook.R;
import com.facebook.FacebookSdk;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

/**
* Created by kristian on 26/04/2015.
*/

public class LoginMember extends Activity {
private static
    EditText txtPassword;
    EditText txtEmail;
    Button btnLogin;
    TextView Forgot_text;
    Button twitter;
    Button facebook;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        txtPassword = (EditText) findViewById(R.id.et_pw);
        txtEmail = (EditText) findViewById(R.id.et_email);
        btnLogin = (Button) findViewById(R.id.btn_login);
        twitter = (Button) findViewById(R.id.twitter);
        facebook = (Button) findViewById(R.id.facebook);
        Forgot_text = (TextView) findViewById(R.id.Forgot_text);
    }
public void getUser(View v) {
    new EndpointsAsyncTask(this).execute();
}

}

Here's the method: public void getUser(View v) { new EndpointsAsyncTask(this).execute(); }

Always compiles fine, but on runtime execution, if I click on a button which invokes this anonymous function it throws me an error saying this:

Could not find class 'com.kkoci.shairlook.EndpointsAsyncTask$1', referenced from method com.kkoci.shairlook.EndpointsAsyncTask.doInBackground
07-02 20:17:18.210   20901-21027/com.kkoci.shairlook E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
        at java.util.concurrent.FutureTask.run(FutureTask.java:239)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
 Caused by: java.lang.NoClassDefFoundError: com.kkoci.shairlook.EndpointsAsyncTask$1
        at com.kkoci.shairlook.EndpointsAsyncTask.doInBackground(EndpointsAsyncTask.java:41)
        at com.kkoci.shairlook.EndpointsAsyncTask.doInBackground(EndpointsAsyncTask.java:22)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)

             This is how I call the function from my button:

<Button
        android:id="@+id/twitter"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="Register with Twitter"
        android:textColor="#FFF"
        android:layout_marginBottom="10dp"
        android:textSize="20dp"
        android:layout_marginTop="11dp"
        android:layout_marginLeft="30dp"
        android:background="@drawable/twitter_button"
        android:onClick="getUser"/>

Any ideas? I really can't understand what is the problem, please, help,

Thanks in advance!

PS = BTW I was following this tutorial Consuming endpoints on android app

Upvotes: 0

Views: 233

Answers (1)

krystian71115
krystian71115

Reputation: 1937

Try this code:

package com.kkoci.shairlook;

/**
* Created by kristian on 02/07/2015.
*/
import android.content.Context;
import android.os.AsyncTask;
import android.util.Pair;
import android.widget.Toast;

import com.appspot.shairlook1.userEndpoint.UserEndpoint;
import com.appspot.shairlook1.userEndpoint.model.User;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
import com.google.api.client.googleapis.services.GoogleClientRequestInitializer;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

public class EndpointsAsyncTask extends AsyncTask<Void, Void, List<User>> implements GoogleClientRequestInitializer{
private static UserEndpoint myApiService = null;
private Context context;

EndpointsAsyncTask(Context context) {
    this.context = context;
}

@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
 // put it here no in MyClass
 abstractGoogleClientRequest.setDisableGZipContent(true);
}

// class MyClass{} // you don't need it


@Override
protected List<User> doInBackground(Void... params) {
    if(myApiService == null) { // Only do this once
        UserEndpoint.Builder builder =  new UserEndpoint.Builder(AndroidHttp.newCompatibleTransport(),
                new AndroidJsonFactory(), null)
// options for running against local devappserver
// - 10.0.2.2 is localhost's IP address in Android emulator
// - turn off compression when running against local devappserver
                .setRootUrl("http://localhost:8080/_ah/api/")
                .setGoogleClientRequestInitializer(this);
// end options for devappserver

        myApiService = builder.build();
    }

    try {
        return myApiService.listUser().execute().getItems();
    } catch (IOException e) {
        return Collections.EMPTY_LIST;
    }
}

@Override
protected void onPostExecute(List<User> result) {
    for (User q : result) {
        Toast.makeText(context, q.getWho() + " : " + q.getWhat(), Toast.LENGTH_LONG).show();
    }
}
}

Upvotes: 1

Related Questions