GVKun编程网logo

php – codeigniter,result()与result_array()(php $result)

28

针对php–codeigniter,result()与result_array()和php$result这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AndroidDriveAPIstar

针对php – codeigniter,result()与result_array()php $result这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Android Drive API startResolutionForResult返回RESULT_CANCELLED、Android startActivityForResult,setResult,onActivityResult未调用、Android startActivityForResult和setResult的区别、android – Camera Result总是返回RESULT_CANCELED等相关知识,希望可以帮助到你。

本文目录一览:

php – codeigniter,result()与result_array()(php $result)

php – codeigniter,result()与result_array()(php $result)

我同时使用result()和result_array().

通常我喜欢把我的结果作为数组,这就是为什么我主要使用result_array()

但我想知道我应该遵循哪种更好的方法,
哪一个在性能方面更有效?

这是我在codeigniter查询中讨论的示例

$query = $this->db->get();
$result = $query->result_array();

或者这应该是更好的方法?

$query = $this->db->get();
$result = $query->result();

现在我也在我的通用模型中使用result_array.

解决方法

Result有一个可选的$type参数,用于决定返回的结果类型.默认情况下($type =“object”),它返回一个对象(result_object()).它可以设置为“array”,然后它将返回一个结果数组,相当于caling result_array().第三个版本接受用作结果对象的自定义类.

CodeIgniter的代码:

/**
* Query result. Acts as a wrapper function for the following functions.
*
* @param string $type 'object','array' or a custom class name
* @return array
*/
public function result($type = 'object')
{
    if ($type === 'array')
    {
        return $this->result_array();
    }
    elseif ($type === 'object')
    {
        return $this->result_object();
    }
    else
    {
        return $this->custom_result_object($type);
    }
}

数组在技术上更快,但它们不是对象.这取决于您希望在何处使用结果.大多数情况下,阵列就足够了.

Android Drive API startResolutionForResult返回RESULT_CANCELLED

Android Drive API startResolutionForResult返回RESULT_CANCELLED

我正在尝试将Google云端硬盘应用到我的 Android应用中,我甚至无法连接到Api客户端.我不知道为什么:

>我在开发人员控制台中为〜/ .android / debug.keystore配置了项目和凭据(值似乎是正确的)
>我有来自Drive for Android Documentation的复制粘贴代码 – >在方法onConnectionFailed()我调用connectionResult.startResolutionForResult()如果connectionResult.hasResolution()
>在onActivityResult中匹配requestCode即使我选择了我的帐户,我也收到了resultCode == 0(RESULT_CANCELLED)

你知道为什么吗?我还尝试添加:

<Meta-data
    android:name="com.google.android.apps.drive.APP_ID"
    android:value="----"/>

在文档页面上没有提到但在某些SO帖子上没有提到的Manifest.

感谢帮助

编辑:

我也试过使用enableAutoManage

mGoogleapiclient = new Googleapiclient.Builder(this)
        .enableAutoManage(this,this)
        .addApi(Drive.API)
        .addScope(Drive.ScopE_FILE)
        .build();

而不是manualy配置连接和connectionFailed回调:

.addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)

它在onConnectionFailed方法中返回错误代码13.根据documentation看来,这在以下时间返回:

OnConnectionFailedListener passed to
enableAutoManage(FragmentActivity,
Googleapiclient.OnConnectionFailedListener) when the user choses not
to complete a provided resolution. For example by canceling a dialog.

但我没有取消它.

我在Nexus 5x上测试它 – Android N.

解决方法

在阅读有关钱包api的内容时,我发现了问题所在

我只需要创建OAuth客户端ID而不是API密钥

>转到Developer Console > Credentials
>点击“创建凭据”> OAuth客户端ID> Android的
>填写详细信息
>创建
>打开OAuth许可屏幕(在凭据页面上)
>填写电子邮件和产品名称
>保存

现在它有效!

Android startActivityForResult,setResult,onActivityResult未调用

Android startActivityForResult,setResult,onActivityResult未调用

我打了一个电话,要求提供结果:

    Intent intentcall = new Intent();
intentcall.setAction(Intent.ACTION_CALL);
intentcall.setData(Uri.parse("tel:" + phoneNumber));
this.startActivityForResult(intentcall, REQUEST_SLIPDROP_ICON_OFF);

然后像这样在电话监听器中设置结果:

    private class MyPhonestateListener extends PhonestateListener{
     public void onCallStateChanged(int state, String incomingNumber) {

         super.onCallStateChanged(state, incomingNumber);

         switch (state) {
             case TelephonyManager.CALL_STATE_IDLE:
                                   setResult(Activity.RESULT_OK);
                                   break;

最后,我想关闭onActivityResult中的图标,但是什么也没有发生.

    switch (requestCode) {

    case REQUEST_SLIPDROP_ICON_OFF:
        Log.d("request icon off", "request icon off");

        if (resultCode == Activity.RESULT_OK) {     

            changeMenuItem(R.id.fall, R.drawable.fall);
            slipAndDropIconOn = false;

        } 

        break;

哪里不对了?请指教!谢谢

解决方法:

我认为此操作不会返回结果,因此调用startActivityForResult与调用startActivity没什么不同

注意:输出=无.
http://developer.android.com/reference/android/content/Intent.html#ACTION_CALL

Android startActivityForResult和setResult的区别

Android startActivityForResult和setResult的区别

 Android startActivityForResult和setResult的区别

startActivityForResult与startActivity的不同之处在于:

1、startActivity( )

仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。

2、startActivityForResult( )

可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult( )方法。

相关函数:

startActivityForResult(Intent intent,Int requestCode)
setResut(int resultCode,Intent intent)
onActivityResult(int requestCode,int resultCode,Intent intent)

 简单例子介绍:

1.跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent,0)

Intent intent=new Intent();
intent.setClass(A.this,B.class);
Bundle bundle=new Bundle();
String str1="aaaaaa";
bundle.putString("str1",str1);
intent.putExtras(bundle);
startActivityForResult(intent,0);//这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要>=0

2.重写onActivityResult方法,用来接收B回传的数据。

protected void onActivityResult(int requestCode,Intent data) {
switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK
  case RESULT_OK:
  Bundle b=data.getExtras(); //data为B中回传的Intent
  String str=b.getString("str1");//str即为回传的值
  break;
default:
  break;
  }
}

3.在B中回传数据时采用setResult方法,并且之后要调用finish方法。

setResult(RESULT_OK,intent); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle
finish();//此处一定要调用finish()方法

Android activity的setResult()在什么时候调用(重点也是难点)

如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给parent的Activity,只有当前Activity被finish,结果才会被发送给parent的onActivityResult去处理!

如果一个activity要返回数据到启动它的那个activity,可以调用setResult()方法。那什么时候去调用setResult()方法返回数据呢?
看一下源码就明白了:

public final void setResult(int resultCode,Intent data) {
    synchronized (this) {
      mResultCode = resultCode;
      mResultData = data;
    }
  }

  public void finish() {
    if (mParent == null) {
      int resultCode;
      Intent resultData;
      synchronized (this) {
        resultCode = mResultCode;
        resultData = mResultData;
      }
      if (Config.LOGV) Log.v(TAG,"Finishing self: token=" + mToken);
      try {
        if (ActivityManagerNative.getDefault()
          .finishActivity(mToken,resultCode,resultData)) {
          mFinished = true;
        }
      } catch (remoteexception e) {
        // Empty
      }
    } else {
      mParent.finishFromChild(this);
    }
  }

这段代码可以看出activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。

那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),

因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的

按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .

解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了

@Override
  public void onBackpressed() {
    Log.i(TAG,"onBackpressed");
    setResult(Const.LIVE_OK);
    super.onBackpressed();
  }

当然还可以在onCreate()就调用setResult,不过我觉得这种方法没有重写onBackpressed()方法好.

 以上就是Android startActivityForResult和setResult的区别,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

android – Camera Result总是返回RESULT_CANCELED

android – Camera Result总是返回RESULT_CANCELED

我想用相机拍照.我只是暂时需要它们所以我做以下事情:
private void takePicture() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    if (intent.resolveActivity(this.getActivity().getPackageManager()) != null) {
        try {
            this.imageFile = File.createTempFile("CROP_SHOT",".jpg",this.getActivity().getCacheDir());

            intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(this.imageFile));
            intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);

            this.startActivityForResult(intent,Globals.REQUEST_TAKE_PHOTO);
        } catch (IOException e) {
            e.printstacktrace();
        }
    }
}

不幸的是,我的onActivityResult中的结果代码为RESULT_CANCELED

@Override
public void onActivityResult(int requestCode,int resultCode,Intent data) {
    Log.v("PictureEdit","onActivityResult");

    super.onActivityResult(requestCode,resultCode,data);

    if(resultCode == Activity.RESULT_OK) {
        if(requestCode == Globals.REQUEST_TAKE_PHOTO) {
            Log.v("PictureEdit","onActivityResult take photo");

            this.startCropImage(Uri.fromFile(this.imageFile));
        } else if (requestCode == Globals.REQUEST_PICK_PHOTO) {
            Log.v("PictureEdit","onActivityResult pick photo");

            this.startCropImage(data.getData());
        } else if (requestCode == Globals.REQUEST_CROP_PHOTO) {
            Log.v("PictureEdit","onActivityResult crop photo");

            this.imageEncoded = data.getStringExtra(Globals.KEY_IMAGE_ENCODED);

            this.imageView.setimageBitmap(Images.decodeImage(imageEncoded));
            this.buttonSave.setEnabled(true);
        } else {
            Log.v("PictureEdit","onActivityResult requestCode: " + requestCode + ",result: " + resultCode);
        }
    } else {
        Log.v("PictureEdit","onActivityResult resultCode is not ok: " + resultCode);
    }
}

我到目前为止在stackoverflow和网络上找到的每个解决方案都没有解决我的问题.我使用缓存目录来创建临时文件:

File.createTempFile("CROP_SHOT",this.getActivity().getCacheDir());

我有正确的权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

从我的智能手机中挑选图像总能正常工作:

private void pickPicture() {
    Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    this.startActivityForResult(intent,Globals.REQUEST_PICK_PHOTO);
}

那么为什么相机总是返回RESULT_CANCELED?

它出现在Android 6.0的Nexus 4和Android 4.2的三星galaxy S III上.

解决方法

I use the cache directory for creating a temp file:

首先,第三方相机应用程序无权在internal storage上使用应用程序的专用缓存目录.

其次,您不应该创建该文件.相机应用程序应该创建该文件.某些相机应用可能会混淆并拒绝覆盖您的文件.

因此,创建指向external storage上某个位置的File对象(例如,getExternalCacheDir()),但不要创建该文件.使用该File对象作为EXTRA_OUTPUT值的基础.

另请注意,MediaStore.EXTRA_VIDEO_QUALITY用于录制视频;它对ACTION_IMAGE_CAPTURE毫无意义.

今天关于php – codeigniter,result()与result_array()php $result的介绍到此结束,谢谢您的阅读,有关Android Drive API startResolutionForResult返回RESULT_CANCELLED、Android startActivityForResult,setResult,onActivityResult未调用、Android startActivityForResult和setResult的区别、android – Camera Result总是返回RESULT_CANCELED等更多相关知识的信息可以在本站进行查询。

本文标签: