Search code examples
androidtextviewsettext

How to settext returned from asyntask


I am trying to set value of a textview returned from asyntask but it gives errors. Here is my logcat

08-23 19:03:18.359: E/AndroidRuntime(26496): FATAL EXCEPTION: main
08-23 19:03:18.359: E/AndroidRuntime(26496): android.content.res.Resources$NotFoundException: String resource ID #0x1
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.content.res.Resources.getText(Resources.java:247)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.widget.TextView.setText(TextView.java:3539)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at com.shajeel.daily_monitoring.fragments.MainFragment$1.onTaskComplete(MainFragment.java:125)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at com.shajeel.daily_monitoring.threads.GetJobOrdersTask.onPostExecute(GetJobOrdersTask.java:145)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at com.shajeel.daily_monitoring.threads.GetJobOrdersTask.onPostExecute(GetJobOrdersTask.java:1)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.os.AsyncTask.finish(AsyncTask.java:602)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.os.AsyncTask.access$600(AsyncTask.java:156)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.os.Looper.loop(Looper.java:137)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at android.app.ActivityThread.main(ActivityThread.java:4424)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at java.lang.reflect.Method.invokeNative(Native Method)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at java.lang.reflect.Method.invoke(Method.java:511)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
08-23 19:03:18.359: E/AndroidRuntime(26496):    at dalvik.system.NativeStart.main(Native Method)

How i can set value of tvJobOrder. Here is my code.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.main_fragment_layout, container,
                false);

        mSeekBar = (SeekBar) v.findViewById(R.id.mSeekBar);
        mSpinner = (Spinner) v.findViewById(R.id.mSpinner);

        tvJobOrder = (TextView) v.
                findViewById(R.id.tvMainJobOrder);
        setRetainInstance(true);

        id = SharedPreferencesUtils.getString(getActivity(), AppConstants.USER_ID_KEY, "");
        return v;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        if (savedInstanceState == null) {
            new GetJobOrdersTask(new GetJobOrdersTask.TaskCompleteListner() {


                @Override
                public void onTaskComplete(List<GetJobOrderModel> list) {
                    // TODO Auto-generated method stub
                    for (int i = 0; i < list.size(); i++) {

                        mJobOrderList.add(list.get(i).getTitle());
                        mJobOrderIdsList.add(list.get(i).getJobID());
                        mJobOrderIdsList.add(list.get(i).getStatus());
                    }

                    mAdapter.notifyDataSetChanged();
                    SharedPreferencesUtils.saveString(getActivity(),
                            AppConstants.CURRENT_JOB_KEY, mJobOrderIdsList.get(0));
                    tvJobOrder.setText(list.size());
                }
            }, SharedPreferencesUtils.getString(
                    MainFragment.this.getActivity(), AppConstants.USER_ID_KEY,
                    "")).execute();

        mSeekBar.setOnSeekBarChangeListener(this);

        mAdapter = new ArrayAdapter<String>(getActivity(),
                R.layout.custom_spinner_item, mJobOrderList);
        mAdapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
        mSpinner.setAdapter(mAdapter);      
        mSpinner.setOnItemSelectedListener(this);
    }
}

Solution

  • you are calling the method

     tvJobOrder.setText(list.size());
    

    with an int argument, which accepts the string resource id. In your case, it's obviously doesn't exist, and this is not what you want to do actually.

    To fix it, do:

    tvJobOrder.setText("" + list.size());