2016-04-25 15 views
0

ではありません。私はアンドロイドアプリを開発しています。私の活動では、asyncTaskを使っています。 onCreateからタスクを呼び出して、onPostExecuteでUIを更新しています。私はlistViewを持って、asyncTaskで私はHTTPリクエストをサーバーから取得するために実行しています。しかし、私の問題は、アクティビティを実行しているときに出力が得られないことがあることです。AsyncTask onPost実行が実行されているが、doInBackgroundは

私はデバッグを試みたが、私がonPostExecuteからの印刷が、doInBackgroundからどれを取得していているようです。また、関連する場合は、Google Cloud EndpointsをHTTPリクエストに使用しています。

助けてください。

public class ILiked extends CustomFragment { 
public ArrayList<User> ilikedList = new ArrayList<>(); 
ListView userList; 
MyAdapter adapter; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View v = inflater.inflate(R.layout.fragment_iliked, null); 
    ILikedAsyncTask task = new ILikedAsyncTask(); 
    task.execute(new Pair<>(getShared().getString("username", ""), v)); 
    return v; 
} 

public SharedPreferences getShared() { 
    SharedPreferences shared; 
    if (Login.sharedPreferences != null) { 
     shared = this.getActivity().getSharedPreferences(Login.MyPreferences, Context.MODE_PRIVATE); 
    } else { 
     shared = this.getActivity().getSharedPreferences(Signup.MyPreferences, Context.MODE_PRIVATE); 
    } 
    return shared; 
} 

public class ILikedAsyncTask extends AsyncTask<Pair<String, View>, Void, ArrayList<User>> { 
    private UserApi myApiService = null; 
    View context; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     System.out.println("I AM IN PRE EXECUTE"); 
    } 

    @Override 
    protected ArrayList<User> doInBackground(Pair<String, View>... params) { 
     context = params[0].second; 
     if (myApiService == null) { 
      UserApi.Builder builder = new UserApi.Builder(AndroidHttp.newCompatibleTransport(), 
        new AndroidJsonFactory(), null) 

        .setRootUrl("MYURL") 
        .setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() { 
         @Override 
         public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException { 
          abstractGoogleClientRequest.setDisableGZipContent(true); 
         } 
        }); 

      myApiService = builder.build(); 
     } 

     ArrayList<User> list = new ArrayList<>(); 
     try { 
      String username = params[0].first; 
      UserCollection users = myApiService.getUsersILiked(username).execute(); 
      System.out.println("CONTENT" + users.getItems().toString()); 
      if (users != null) { 
       List<User> userList = users.getItems(); 
       list.addAll(userList); 
      } 

     } catch (IOException e) { 

     } 
     return list; 

    } 


    @Override 
    protected void onPostExecute(final ArrayList<User> result) { 
     super.onPostExecute(result); 
     userList = (ListView) context.findViewById(R.id.iliked_list); 

     adapter = new MyAdapter(context.getContext(), result); 
     userList.setAdapter(adapter); 
     //System.out.println("List Content: "+result.get(0)); 
     userList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Profile fr = new Profile(); 
       FragmentManager fm = getFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       Bundle args = new Bundle(); 
       args.putString("username", result.get(position).getUsername()); 
       fr.setArguments(args); 
       ft.replace(R.id.content_frame, fr); 
       ft.commit(); 

      } 
     }); 
     System.out.println("DID THE ASYNC"); 
    } 
} 

}

+0

例外が発生する可能性があります。それを確認するために 'catch block'にログを追加してください。 –

答えて

0

たぶん、単純ないくつかののIOExceptionmyApiServiceによってスローされます。

は、ここに私のクラスです。 IOExceptionsをキャッチしますが、ログまたはスタックトレースは出力しません。この最初のチェックは としましょう。そうdoInBackgroundは確かに と呼ばれていたあなたはonPostExecuteから毎回ログを持っている場合

catch (IOException e) { 

     } 

、(Androidがいることありません)。

とにかくあなたはonPostExecuteからこの

userList = (ListView) context.findViewById(R.id.iliked_list); 

    adapter = new MyAdapter(context.getContext(), result); 
    userList.setAdapter(adapter); 
    //System.out.println("List Content: "+result.get(0)); 
    userList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Profile fr = new Profile(); 
      FragmentManager fm = getFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 
      Bundle args = new Bundle(); 
      args.putString("username", result.get(position).getUsername()); 
      fr.setArguments(args); 
      ft.replace(R.id.content_frame, fr); 
      ft.commit(); 

     } 
    }); 

のすべてを削除してのonCreateまたはコードの他の部分での初期化を行う必要があります。 onPostExecuteでは、必要なUI要素、notifyAdaptersなどを更新する必要があります。初期化は先に行う必要があります。そのアプローチを考えてみましょう。

+0

ありがとう、たくさんの人、私のAPIメソッドは時々例外を投げて、感謝した。 –

関連する問題