2015-06-10 4 views
-1

Я пишу приложение, в котором у меня разные fragment. В целом Fragment Я должен использовать Async Task для получения данных с веб-сервера, для которых у меня есть , написанный общим классом Async и реализующий интерфейс для получения result, но есть ошибка при отправке, я не знаю почему? Журнал ошибок приведен ниже:One AsyncTask для нескольких фрагментов

06-10 07:51:58.070 1459-1459/mewapp.interaconnect E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: mewapp.interaconnect, PID: 1459 
java.lang.RuntimeException: Unable to start activity ComponentInfo{mewapp.interaconnect/mewapp.interaconnect.AsyncTask.Main2Activity}: java.lang.ClassCastException: mewapp.interaconnect.AsyncTask.Main2Activity cannot be cast to mewapp.interaconnect.AsyncTask.AsyncRequest$OnAsyncRequestComplete 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassCastException: mewapp.interaconnect.AsyncTask.Main2Activity cannot be cast to mewapp.interaconnect.AsyncTask.AsyncRequest$OnAsyncRequestComplete 
     at mewapp.interaconnect.AsyncTask.AsyncRequest.<init>(AsyncRequest.java:21) 
     at mewapp.interaconnect.AsyncTask.PostsActivity.onCreateView(PostsActivity.java:37) 
     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) 
     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740) 
     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) 
     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551) 
     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171) 
     at android.app.Activity.performStart(Activity.java:5241) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
 at android.app.ActivityThread.access$800(ActivityThread.java:135) 

Это протоколирует ошибки

public class AsyncRequest extends AsyncTask<String, Integer, JSONObject> { 

OnAsyncRequestComplete caller; 
Context context; 
JSONObject parameters; 
ProgressDialog pDialog = null; 

// Three Constructors 
public AsyncRequest(Context a, JSONObject p) { 
    caller = (OnAsyncRequestComplete) a; 
    context = a; 
    parameters = p; 
} 

// Interface to be implemented by calling activity 
public interface OnAsyncRequestComplete { 
    public void asyncResponse(JSONObject response); 
} 

public JSONObject doInBackground(String... urls) { 
    // get url pointing to entry point of API 
    String address = urls[0].toString(); 
    Log.e("Test","InDoLoginProcess"); 
    return ReqSender.sendJson(parameters, address); 
} 

public void onPreExecute() { 
    pDialog = new ProgressDialog(context); 
    pDialog.setMessage("Loading data.."); // typically you will define such 
    // strings in a remote file. 
    pDialog.show(); 
} 

public void onPostExecute(JSONObject response) { 
    if (pDialog != null && pDialog.isShowing()) { 
     pDialog.dismiss(); 
    } 
    caller.asyncResponse(response); 
} 

protected void onCancelled(JSONObject response) { 
    if (pDialog != null && pDialog.isShowing()) { 
     pDialog.dismiss(); 
    } 
    caller.asyncResponse(response); 
} 
} 

Это мой AsyncTask CLSS

public class PostsActivity extends Fragment implements 
    AsyncRequest.OnAsyncRequestComplete { 

TextView titlesView; 
String apiURL = "MyServer"; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.activity_post, container, false); 
    titlesView = (TextView) v.findViewById(R.id.post_titles); 
    try { 
     JSONObject obj = new JSONObject(); 
     obj.put(ICTags.REQUEST_TYPE_TAG,ICTags.LOGIN_TAG); 
     obj.put(ICTags.USER_NAME_TAG, "raza4136"); 
     obj.put(ICTags.PASSWORD_TAG, "12345678"); 

     AsyncRequest getPosts = new AsyncRequest((Activity)getActivity(),obj); 
     getPosts.execute(apiURL); 
    }catch (JSONException e){ 
     e.printStackTrace(); 
    } 
    return v; 
} 

@Override 
public void asyncResponse(JSONObject objects) 
{ 
     titlesView.setText(objects.toString()); 
} 
} 

Это мой фрагмент класса для вызова Async

+0

Вызванный: java.lang.ClassCastException: mewapp.interaconnect.AsyncTask.Main2Activity не может быть приведен к mewapp.interaconnect.AsyncTask.AsyncRequest $ OnAsyncRequestComplete на mewapp.interaconnect.AsyncTask.AsyncRequest. (AsyncRequest.java21) – zgc7009

+0

Я предполагаю, что эта строка 'AsyncRequest getPosts = new AsyncRequest ((Activity) getActivity(), obj);' дающая ошибку – Pankaj

+1

'caller = (OnAsyncRequestComplete) a;' вызывает ошибку. MainActivity2 не реализует OnAsyncRequestComplete, поэтому вы не можете использовать его для этого. – zgc7009

ответ

0

Мы не может передать объект контекста объекту интерфейса. сделать следующее:

  1. конструктор изменения в классе AsyncRequest

    общественности AsyncRequest (контекст, JSONObject р, OnAsyncRequestComplete абонент) { this.caller = вызывающего абонента; context = a; parameters = p; }

  2. Заменить следующий код в вашей деятельности, где вы звоните AsyncRequest

    AsyncRequest getPosts = новый AsyncRequest ((активность) getActivity(), OBJ, это);

Надеюсь, это поможет вам.

+0

Thanx it Working – user3391191

Смежные вопросы