首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同步任务不能将变量从doInBackground传递到onPostExecute更改的公共变量。在执行后

同步任务不能将变量从doInBackground传递到onPostExecute更改的公共变量。在执行后
EN

Stack Overflow用户
提问于 2013-12-14 10:38:19
回答 2查看 867关注 0票数 1

我有下面的代码来处理异步任务,我正在尝试更改一个名为result的外部变量

代码语言:javascript
运行
复制
    public class UP extends Fragment {
    private String[] result = new String[3];

      SumRequ connRes = new SumRequ();
  connRes.execute();

  final String bM = result[0];
  final String bT = result[1];
  final String hft = result[2];
  final String hfy = result[3];

    private class SuReq extends AsyncTask<String, String[], String[]> {

    @Override
    protected String[] doInBackground(String... params) {

        String[] connResult;

          final String neuSiparisUrlStr = getString(R.string.neu_siparis_url);
          String wart = "";
          String wort = "";
          String week = "";
          String mth = "";

        try {
              JSONTokener neuSipTokener = new JSONTokener(Sources.httpConnGet(neuSiparisUrlStr, getActivity()).toString());
                    JSONArray neuSipArray=new JSONArray(neuSipTokener);

                    for(int i=0; i<(neuSipArray.length()); i++)
                    {
                        JSONObject json_obj_neu_sip = neuSipArray.getJSONObject(i);

                        wart = json_obj_neu_sip.getString("mik");
                        wort = json_obj_neu_sip.getString("tur");
                        week = json_obj_neu_sip.getString("pt");
                        mth = json_obj_neu_sip.getString("pt2");
                    }

        } catch (Exception e) {

        }
        connResult = new String[]{wart, wort, week, mth};
        return connResult;
    }

    @Override
    protected void onPostExecute(String[] connRes) {
        super.onPostExecute(connRes);
        result[0] = connRes[0];
        result[1] = connRes[1];
        result[2] = connRes[2];
        result[3] = connRes[3];
    }
    }

好的,事情是这样的。我的代码似乎一直在工作,直到return in doInBackground。当它试图将String[]传递给onPostExecute时,它就崩溃了。我跟踪调试,看到所有字符串都装满了我需要的信息。(瓦特、麦汁、周、米)我就是解决不了问题。

这也是我的日志:

代码语言:javascript
运行
复制
 12-14 10:27:42.865: E/AndroidRuntime(1773): FATAL EXCEPTION: main
 12-14 10:27:42.865: E/AndroidRuntime(1773): java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at com.akilli.ticaret.upfragments.UPAnasayfa.onCreateView(UPAnasayfa.java:64)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.View.measure(View.java:15848)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.View.measure(View.java:15848)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:302)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.View.measure(View.java:15848)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.View.measure(View.java:15848)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.Choreographer.doFrame(Choreographer.java:532)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.os.Handler.handleCallback(Handler.java:730)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.os.Handler.dispatchMessage(Handler.java:92)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.os.Looper.loop(Looper.java:137)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at android.app.ActivityThread.main(ActivityThread.java:5103)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at java.lang.reflect.Method.invokeNative(Native Method)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at java.lang.reflect.Method.invoke(Method.java:525)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
 12-14 10:27:42.865: E/AndroidRuntime(1773):    at dalvik.system.NativeStart.main(Native Method)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-14 10:43:17

错误为neuSipArray.length());并从yeniSipArray.getJSONObject(i);中获取值

代码语言:javascript
运行
复制
for(int i=0; i<(neuSipArray.length()); i++)
                    {
              // error  ->  JSONObject json_obj_yeni_sip = yeniSipArray.getJSONObject(i);
replace to 
->          JSONObject json_obj_yeni_sip = neuSipArray.getJSONObject(i);
票数 2
EN

Stack Overflow用户

发布于 2013-12-14 11:00:56

好吧,这只是个愚蠢的错误,小心的人。String[] a= String3;并不意味着: a,a1,a2,a3 --它只是: a,a1和a2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20582225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档